【问题标题】:How to remove generated build artifacts from Maven's target directory?如何从 Maven 的目标目录中删除生成的构建工件?
【发布时间】:2010-12-05 21:30:31
【问题描述】:

如何从 Maven 的目标目录中删除生成的构建工件? Maven 生成一个 jar 或 war 文件到目标目录。我想在 maven 将 jar/war 文件安装到本地存储库之后删除该文件(即,在 maven 执行“安装”目标之后)。删除可能发生在安装目标或我手动执行的单独目标。

请注意,我希望目标目录的其他部分保持不变,例如 target/site 和 target/surefire-reports。

【问题讨论】:

  • 出于好奇,这背后的原因是什么?
  • 当有人想要创建诸如 NSIS exe 文件之类的工件但使用 jar 工件类型时,我已经看到这样做了,因为它有一组方便的生命周期绑定,或者如果他们没有不关心中间工件(例如生成 exe 的 jar 文件。)
  • 基本上我在持续集成服务器中运行 maven 构建,我只对安装到本地 repo 的报告和内容感兴趣。其余的文件只是在浪费空间,而我的 jar 文件恰好相当大。

标签: maven-2 maven-plugin


【解决方案1】:

只需使用 clean 插件并在安装阶段后运行:

  <plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.2</version>
    <executions>
      <execution>
        <id>auto-clean</id>
        <phase>install</phase>
        <goals>
          <goal>clean</goal>
        </goals>
        <configuration>
          <filesets>
            <fileset>
              <directory>${project.build.outputDirectory}</directory>
              <includes>
                <include>**/*.jar</include>
              </includes>
            </fileset>
           </filesets>
         </configuration>
      </execution>
    </executions>
  </plugin>

【讨论】:

  • +1 表示过滤器,但目录元素应为 ${project.build.outputDirectory} 以允许覆盖值
  • 我只需要从结果中删除一个特定的目录。从 2.3 版开始,插件默认删除整个目录,除非您在 标记中指定 excludeDefaultDirectories 属性。
【解决方案2】:

我知道我有点晚了。但我想问题是,一个 Maven 项目会自动归档工件。就我而言,我禁用了自动归档,只是使用构建后操作手动归档了工件。这样,只有我感兴趣的工件被归档。我愿意将生成的工件留在磁盘上,直到下一次构建运行。

【讨论】:

    【解决方案3】:

    Maven 中没有内置的东西可以做到这一点。您可以使用antrun插件在安装后执行删除工件的Ant脚本,或使用exec插件通过命令行删除工件,或编写您自己的插件。

    我认为做这些事情几乎没有价值,如果有的话。 Maven 旨在将中间和最终工件放置在 target 中,以使后续构建更高效。已经没有任何东西可以做到这一点的原因表明这没有什么价值。如果它对您有价值,您有几个选择。

    【讨论】:

    • 嗯,这不是真的。见多米的回答。话虽如此,我仍然想知道为什么要这样做。
    猜你喜欢
    • 2016-08-31
    • 2019-02-09
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多