4

我尝试配置 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>

这很好用,只要包装是标准包装之一......但如果项目的包装是“捆绑”(生成 .jar),那么 ${project.packaging} 变量是“捆绑”实际文件以“.jar”结尾=复制失败。

如何获取放入输出目录的文件的“真实”名称?

4

3 回答 3

9

在 ant build.xml 中使用:

${project.build.directory}/${project.artifactId}-${project.version}.jar
于 2013-06-28T06:51:40.677 回答
3

没有办法可靠地做到这一点。例如,一个 POM 可以有多个工件作为结果(二进制 JAR、源 JAR、测试二进制 JAR、测试源 JAR)。其中哪一个是正确的复制?

可能的解决方案:

  1. 替换${project.packaging}jar。应该在大多数情况下工作。
  2. 使用文件集而不是硬编码的文件名让 Ant 根据模式找出名称。
于 2012-06-01T10:31:53.710 回答
1

一种方法是创建一个名为packaging-suffix或类似的属性。在您的所有项目中(或者在超级 pom 中,如果您有一个),您可以定义此属性以具有值${project.packaging},但在捆绑项目中,您将值定义为jar. 然后,您在 antrun 插件配置中引用该属性。

根据您的项目的设置方式,这可能是也可能不是一个好的解决方案。

IE:

<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}"/>
于 2012-06-01T10:55:47.280 回答