Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven: specify the outputDirectory only for packaging a jar?

Tags:

maven-2

maven

How can I specify the outputDirectory only for packaging a jar?

http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html this shows all parameters, but how can I set them in the commandline or pom.xml?

like image 998
Bastl Avatar asked Jan 21 '11 09:01

Bastl


People also ask

What is packaging jar in Maven?

Overview. The packaging type is an important aspect of any Maven project. It specifies the type of artifact the project produces. Generally, a build produces a jar, war, pom, or other executable. Maven offers many default packaging types and also provides the flexibility to define a custom one.

What is Maven default packaging value?

Every Maven project has a packaging type. If it is not specified in the POM, then the default value "jar" would be used.

What does mvn dependency resolve do?

Description: Goal that resolves the project dependencies from the repository.


2 Answers

on command line

-DoutputDirectory=<path> 

and in pom.xml

<build>   <plugins>     <plugin>       <groupId>org.apache.maven.plugins</groupId>       <artifactId>maven-jar-plugin</artifactId>       <version>2.3.1</version>       <configuration>         <outputDirectory>/my/path</outputDirectory>       </configuration>     </plugin>   </plugins> </build> 
like image 109
lweller Avatar answered Oct 16 '22 17:10

lweller


Parameter Expressions

About command line usage:

The parameter documentation specifies that the parameter is initialized to the value of the property ${project.build.directory} (which is the property referring to the target folder)

Here's what this means:

For mojos that are intended to be executed directly from the CLI, their parameters usually provide a means to be configured via system properties instead of a <configuration/> section in the POM. The plugin documentation for those parameters will list an expression that denotes the system properties for the configuration. In the mojo above, the parameter url is associated with the expression ${query.url}, meaning its value can be specified by the system property query.url as shown below:

mvn myquery:query -Dquery.url=http://maven.apache.org 

Reference:

  • Guide to Configuring Plug-ins > Generic Configuration

Configuring ${project.build.directory}

However, ${project.build.directory} is not a system property, it's a property of the Project's Build object.

You can't set maven's internal properties directly on the command line, but you can get there with a little trick by adding placeholders in your pom.xml:

<build>     <directory>${dir}</directory> </build> 

Now, the output directory is set via the property from the command line (using -Ddir=somedirectory). Downside: now you always have to use the -Ddir parameter on the command line.

Using Profiles

But there's help here, too. Just use a profile when you want to configure the directory:

<profiles>     <profile>         <id>conf</id>         <build>             <directory>${dir}</directory>         </build>     </profile> </profiles> 

Now you can either do

# everything goes in someOtherDir instead of target mvn clean install -Pconf -Ddir=someOtherDir 

or plain old

# everything goes in target mvn clean install 

Configuring the Jar Plugin

Now if you just want to change the jar outputDirectory from the command line without redirecting everything from target, we'll modify the profile to configure the plugin from a command line property:

<profiles>     <profile>         <id>conf</id>         <build>             <plugins>                 <plugin>                     <groupId>org.apache.maven.plugins</groupId>                     <artifactId>maven-jar-plugin</artifactId>                     <version>2.3.1</version>                     <configuration>                         <outputDirectory>${dir}</outputDirectory>                     </configuration>                 </plugin>             </plugins>         </build>     </profile> </profiles> 

The usage is identical to above:

# everything goes in someOtherDir instead of target mvn clean install -Pconf -Ddir=someOtherDir 
like image 35
Sean Patrick Floyd Avatar answered Oct 16 '22 16:10

Sean Patrick Floyd