【问题标题】:get maven clean install to work like maven clean + maven install让 maven clean install 像 maven clean + maven install 一样工作
【发布时间】:2014-06-18 13:22:23
【问题描述】:

我有以下项目层次结构:

app
|-module1
| |-pom.xml
|-module2
| |-pom.xml
|-pom.xml

Module1 和 module2 都将文件复制到同一个目标目录,所以我使用应用程序的 pom.xml 来清除该目录。我的问题是,现在的执行顺序是 module1[clean]、module1[install]、module2[clean]、module2[install]、app[clean]、app[install],所以 module1 和 module2 放入该目录的所有内容都会被删除。

我想让它先执行 all clean,然后执行 all install,即使我运行 mvn clean install。或者,如果在 module1[install] 和 module2[install] 之前有另一种方式来执行 app[clean],那也可以。

编辑

我最终制作了一个单独的模块(Netbeans POM projekt)用于单独清洁。不是我希望的解决方案,但它现在有效。

【问题讨论】:

  • 如何使用“mvn clean && mvn install”。如果您实际上不需要 maven 在单个 maven 执行中执行此操作,我认为这是一种可行的方法。
  • 这将是一个开源项目,我不想破坏 IDE 的“Clean and Build”按钮的功能
  • 如果你确实遇到了Module1和Module2复制文件到同一个目标目录的情况,那就真的有问题了。除此之外,执行顺序由 Maven 定义,如您所描述的 Module (clean, install),因此您无法更改它。如果这是一个开源项目,您可以提供参考吗?
  • 我相信 maven 作为构建工具应该用于为项目的分发版本创建所需的文件层次结构(例如,将所有依赖项复制到单个 lib 文件夹,将许可证/自述文件移动到根文件夹等),而不是像许多项目那样使用 shell 脚本。源代码尚未处于我可以分享的状态。

标签: java maven


【解决方案1】:

这里问题的根源在于你试图让 Maven 做一些与 Maven 的多模块“约定”相矛盾的事情,并且与 Maven 对“目标目录”的“理解”相冲突。 Maven 的反应器以它的方式运行是有原因的,它是为了保留 Maven 在多模块构建中如何构建模块的“精神”(或“约定”)。

在 Maven 中,target 目录应该只属于一个项目:每个项目都有自己的target 目录。在您的场景中,appmodule1module2 应该有一个不同的target 目录。

我认为,为了实现您的目标保持构建过程的灵活性,最好的选择是:

  1. module1 将自己的JAR 输出到自己的target 目录(module1/target) 中。
  2. module2 将自己的JAR 输出到自己的target 目录(module2/target) 中。
  3. app(父模块)添加一个插件,该插件将从module1/targetmodule2/target 收集所需的任何内容到app/target,并对这些工件进行任何处理。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多