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