我尝试配置 maven ant 插件以将构建的工件复制到自定义位置:
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<copy verbose="true"
file="target/${project.build.finalName}.${project.packaging}"
tofile="${user.home}/tmp/test/${project.build.finalName}.${project.packaging}"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
只要包装是标准包装之一,就可以正常工作......但是,如果项目的打包是"bundle"(这会生成一个.jar),则 ${project.packaging} 变量是 "bundle",实际文件以 ".jar" 结尾 = 复制失败。
如何获取放入输出目录的文件的"真实"名称?
在 ant build 中.xml使用:
${project.build.directory}/${project.artifactId}-${project.version}.jar
没有办法可靠地做到这一点。例如,POM 可以有多个工件作为结果(二进制 JAR、源 JAR、测试二进制 JAR、测试源 JAR)。其中哪一个是正确的复制?
可能的解决方案:
- 将
${project.packaging}
替换为jar
。在大多数情况下应该有效。 - 使用文件集而不是硬编码的文件名,让 Ant 根据模式找出名称。
一种方法是创建一个名为packaging-suffix
的属性或类似的东西。在您的所有项目中(或者在超级 pom 中,如果您有的话),您可以定义此属性以具有值${project.packaging}
但在捆绑项目中,您将值定义为 jar
。然后,在 antrun 插件配置中引用该属性。
根据您的项目设置方式,这可能是也可能不是一个好的解决方案。
即:
<properties>
<packaging-suffix>${project.packaging}</packaging-suffix>
</properties>
与
<properties>
<packaging-suffix>jar</packaging-suffix>
</properties>
然后
<copy verbose="true"
file="target/${project.build.finalName}.${packaging-suffix}"
tofile="${user.home}/tmp/test/${project.build.finalName}.${packaging-suffix}"/>