【问题标题】:Maven create many jars from one moduleMaven 从一个模块创建多个 jar
【发布时间】:2014-07-03 11:16:15
【问题描述】:

我有一个 maven(多模块)项目,其中包含类似 IAction 的内容。在这个项目中,我实施了大约 50 个不同动作的实施。每个动作由一个MyAction.java 和一个MyAction.properties 文件组成。

我使用 Java 的 SPI (java.util.spi) 在运行时加载所有实现。这一切都很好,但现在我想将每个 Action 打包到一个 jar 中,这样我最终会得到 50 个 jar。

什么是完成此任务的好方法?我真的不想为每个操作创建一个子模块,因为这需要大量维护。

【问题讨论】:

  • 您可以在 bash/batch 中编写脚本(取决于您的操作系统),并使用一些 -Dproperty=iterator_index 启动 mvn 50 次,然后使用 build-helper-maven-plugin 编译来自“ src/main/java/org/mycompany/${iterator_index}"
  • 不,不要这样做。而是编写一个小插件来做到这一点。否则,您的构建将完全依赖于特定环境。
  • 50 个罐子......和世界上最长的类路径。你确定要这么做吗?您的客户真的会在此基础上挑选要部署的操作吗?
  • 超过 50 个 jar 的项目并不少见。我使用了一个自定义的 jar 类加载器来处理它,所以不用担心类路径。它是关于能够自定义安装并允许单独测试功能。

标签: java maven jar packaging generated


【解决方案1】:

您可以使用 Maven assembly plugin 来创建用于构建模块的其他工件。但是,请注意,一旦创建了这些工件,就需要将它们添加到部署队列中,以防您不仅要构建这些工件。这可以通过例如使用build-helper-maven-plugin 来实现。

但是,对于超过 50 个元素的迭代,您可能需要考虑编写自己的专用插件。还有其他插件允许在另一个插件上进行迭代,但这会炸毁你的 POM。如果构建因此非常具体,那么您可能会考虑编写一个专门用于此任务的单独插件。您可以使用纯 Java 而不是 XML 来执行此操作,这并不像听起来那么难。有文档,并且有 Maven 的默认 API。您可以查看命名插件的源代码,了解如何满足您的要求。

【讨论】:

  • 感谢 raphw。我创建了一个为我工作的 mojo。这也是一次很好的学习体验:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 2016-09-12
  • 2015-06-19
  • 2012-10-02
  • 2017-09-20
  • 2022-01-16
相关资源
最近更新 更多