如何只为打包jar文件指定输出目录?
http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html 这个链接展示了所有的参数,但我该如何在命令行或pom.xml文件中设置它们?
如何只为打包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>
关于命令行用法:
参数文档指定该参数被初始化为属性${project.build.directory}
的值(该属性是指目标文件夹)
这是什么意思:
对于那些打算直接从CLI执行的mojos,它们的参数通常提供一种方式通过系统属性而不是POM中的
<configuration/>
部分进行配置。插件文档将列出表示配置的系统属性的表达式。在上面的mojo中,参数url与表达式${query.url}
相关联,这意味着它的值可以通过系统属性query.url
指定,如下所示:
mvn myquery:query -Dquery.url=http://maven.apache.org
参考:
然而,${project.build.directory}
不是系统属性,它是 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输出目录而不是重定向所有内容到target,我们将修改配置文件以通过命令行属性配置插件:
<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的出色解释。
与其创建一个配置文件并总是使用mvn
命令的-P
开关,我想使用另一种方式来设置属性${dir}的默认值。
只需将${dir}
的默认值定义为${project.build.directory}
即可。
<properties>
<dir>${project.build.directory}</dir>
</properties>
<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
<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>