如何指定outputDirectory仅用于打包jar?
http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html这显示了所有参数,但是如何在命令行或pom.xml中设置它们?
答案 0 :(得分:62)
在命令行上
-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>
答案 1 :(得分:45)
关于命令行用法:
The parameter documentation指定将参数初始化为属性${project.build.directory}
的值(这是指向目标文件夹的属性)
这就是这意味着:
对于想要的mojos 直接从CLI执行,他们的 参数通常提供一种手段 通过系统属性配置 而不是
<configuration/>
部分 在POM中。插件文档 对于那些参数将列出一个 表示系统的表达式 配置的属性。在 上面的mojo,参数url是 与表达相关联${query.url}
,意思是它的价值 由系统属性指定query.url
如下所示:
mvn myquery:query -Dquery.url=http://maven.apache.org
<强>参考:强>
但是,${project.build.directory}
不是it's a property的Project对象的系统属性Build
。
您不能直接在命令行上设置maven的内部属性,但是您可以通过在pom.xml中添加占位符来实现一些技巧:
<build>
<directory>${dir}</directory>
</build>
现在,输出目录是通过命令行中的属性设置的(使用-Ddir=somedirectory
)。缺点:现在您必须在命令行中使用-Ddir
参数。
但是这里也有帮助。只需在配置目录时使用配置文件:
<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
现在,如果您只想从命令行更改jar outputDirectory而不重定向目标中的所有内容,我们将修改配置文件以从命令行属性配置插件:
<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
答案 2 :(得分:3)
感谢@Sean Patrick Floyd的出色解释。
我不想创建个人资料并始终使用mvn
-P
切换,而是想使用其他方式设置属性$ {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
答案 3 :(得分:0)
如果您还希望将依赖关系jar也复制到目标文件夹,请使用maven-dependency-plugin。
<project>
...
...
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>