Maven:指定outputDirectory仅用于打包jar吗?

我怎样才能指定outputDirectory只打包一个jar子?

http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html这显示了所有的参数,但是我怎样才能在命令行或pom.xml中设置它们呢?

在命令行上

-DoutputDirectory=<path> 

并在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> 

参数expression式

关于命令行用法:

参数文档指定将参数初始化为属性${project.build.directory} (这是指向目标文件夹的属性)的值,

这是什么意思:

对于要直接从CLI执行的mojos,它们的参数通常提供一种通过系统属性进行configuration的方法,而不是POM中的<configuration/>部分。 这些参数的插件文档将列出表示configuration的系统属性的expression式。 在上面的mojo中,参数url与expression式${query.url}相关联,这意味着它的值可以由系统属性query.url指定,如下所示:

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

参考:

  • configuration插件指南>通用configuration

configuration$ {project.build.directory}

但是, ${project.build.directory}不是一个系统属性, 它是 Project的Build对象的一个属性 。

你不能直接在命令行中设置maven的内部属性,但是你可以通过在你的pom.xml中添加占位符来获得一些小技巧:

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

现在,输出目录是通过命令行中的属性设置的(使用-Ddir=somedirectory )。 缺点:现在你总是必须在命令行上使用-Ddir参数。

使用configuration文件

但是这里也有帮助。 当你想要configuration目录时只需使用一个configuration文件:

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

现在你可以做

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

或平原

 # everything goes in target mvn clean install 

configurationJar插件

现在,如果只想从命令行更改jar outputDirectory,而不redirect目标中的所有内容,我们将修改configuration文件以从命令行属性configuration插件:

 <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> 

用法与上面相同:

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

谢谢@Sean Patrick Floyd的出色解释。

而不是创build一个configuration文件,总是通过-P开关使用mvn,我想使用anohter的方式,使属性$ {dir}的默认值。

只需将$ {dir}的默认值定义为$ {project.build.directory}

 <properties> <dir>${project.build.directory}</dir> </properties> 

和@Sean Patrick Floyd一样,设置outputDirectory。

 <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> 

现在你可以做

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

或平原

 # everything goes in target mvn clean install