Bittrance
Bittrance

Reputation: 2260

Optional mapping sections in Maven RPM plugin?

I have a Maven RPM plugin mapping thus:

<mapping>
  <directory>/etc/myconfig</directory>
  <configuration>true</configuration>
  <sources>
    <source>
      <location>${project.build.directory}</location>
      <includes>
        <include>*.conf</include>
      </includes>
    </source>
  </sources>
</mapping>

However, depending on the packaging process, there may be zero .conf files to put in /etc. When this occurs, RPM plugin says:

[ERROR] Failed to execute goal org.codehaus.mojo:rpm-maven-plugin:2.1.2:rpm (default) on project clients: 
Unable to copy files for packaging: You must set at least one file. -> [Help 1]

Is there any way to have a mapping section that is happy with including zero files?

Upvotes: 8

Views: 4953

Answers (2)

Rogger296
Rogger296

Reputation: 147

Me too faced the same issue and was trying hard to resolve it. The error message is not so intuitive. It's really hard to address such issue.

error :
[ERROR] Failed to execute goal org.codehaus.mojo:rpm-maven-plugin:2.1-alpha-3x:attached-rpm (generate-rpm) on project XXX_assembly: Unable to copy files for packaging: You must set at least one file. -> [Help 1]

I was using below version of plugin *

<groupId>org.codehaus.mojo</groupId>
                        <artifactId>rpm-maven-plugin</artifactId>
                        <version>2.1-alpha-3x</version>

* Below is my Mapping tag from plugin

enter image description here

What this mapping was trying to is copy batch-test-1.0.war from ../batch/target location to target location at ${app.prefix}/batch

Issue was tag was having name of war file which does not exist and incorrect. i have given wrong name of war file so Maven was complaining that it should have something to copy.i corrected it by giving correct name of my war file as below. batch-test-1.0.war

Upvotes: 0

haventchecked
haventchecked

Reputation: 2016

The best I've been able to come up with is omitting the <includes> tag, which takes everything from what's specified in <location>.

location

The file or directory to include. If a directory is specified, all files and subdirectories are also included.

You will need to be as specific as possible in the path for these mappings that don't have include patterns specified. I added confs to the location below to avoid pulling in everything else in project.build.directory.

Even if no files are selected, the <directory> will still be created.

<mapping>
  <directory>/etc/myconfig</directory>
  <configuration>true</configuration>
  <sources>
    <source>
      <location>${project.build.directory}/confs</location>   
    </source>
  </sources>
</mapping>

Upvotes: 2

Related Questions