如何继承多模块 Maven 项目及其所有优点?

2024-01-25

我找不到一个好的、可扩展的解决方案的问题:

我有一个项目可以提供给定工件的多种风格。这是一个多模块项目,目前有 3 个模块:

  • /flavor1_模块
  • /flavor2_模块
  • /flavor3_模块

问题是我还有另外 50 个项目需要以相同的方式设置,即提供 3 种风格。

考虑的解决方案:

  1. turning the already created multimodule project into a parent for all other 50 projects
    • Cons:它就是行不通。保留在父模块中的指令不会被继承,因此它们不会被执行。
  2. using maven-archetype-plugin http://maven.apache.org/archetype/maven-archetype-plugin/ to create a multi-module project template http://maven.apache.org/archetype/maven-archetype-plugin/examples/create-multi-module-project.html, and then creating all 50 projects based on the template
    • Cons:如果我需要flavor4,我需要手动更新所有50个项目以添加flavor4_module(并复制其内容)。不可扩展。
  3. embedding the configuration of all flavours into a single pom and enable or disable them based on profiles (i.e. using composition by profiles instead of inheritance via modules). Then pointing the 50 projects to it, as their parent. This would create "inline" modules
    • Cons:我需要实现我自己的机制,这些机制是由开箱即用的模块提供的。 (例如,在单独的目录中构建每种风格)。我还会失去模块提供的清晰分离。

有什么想法如何做得很好吗?还有其他选择吗?

谢谢, 卢卡斯

Edit:

另一种选择是延长Maven Reactor 插件 http://maven.apache.org/plugins/maven-reactor-plugin/index.html with 反应器:注入模块目标,它将从外部工件下载模块定义,并将其定义附加为普通模块。这将动态创建一个新模块。然后所有 50 个项目都可以将此 pom.xml 作为其父项目。

配置看起来像这样(草案):

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-reactor-plugin</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <id>inject</id>
      <phase>initialize</phase>
      <goals>
        <goal>inject-modules</goal>
      </goals>
      <configuration>
        <modules>
          <module>
            <artifactId>flavour1_module</artifactId>
            <groupId>[ groupId ]</groupId>
            <version>[ version ]</version>
          </module>
          <module>
            <artifactId>flavour2_module</artifactId>
            <groupId>[ groupId ]</groupId>
            <version>[ version ]</version>
          </module>
          <module>
            <artifactId>flavour3_module</artifactId>
            <groupId>[ groupId ]</groupId>
            <version>[ version ]</version>
          </module>
        </modules>
      </configuration>
    </execution>
  </executions>
</plugin>

走这条路有意义吗?

Update:

编写一个操纵要执行的模块列表的插件(我上面描述的模块注入的想法)似乎不可能实现,因为模块是由maven核心处理的,并且该机制并不是设计来扩展的一个插件。这两个插件执行类似的工作,即操作要执行的项目列表,这一事实证实了这一点:

  • Maven Reactor 插件 http://maven.apache.org/plugins/maven-reactor-plugin/index.html
  • maven-invoker-插件 http://maven.apache.org/plugins/maven-invoker-plugin/

通过执行系统调用来创建 Maven 子进程来实现这一点。对我来说,这不是可行的方法,因为这是一个非常不稳定的解决方案。的确Maven Reactor 插件 http://maven.apache.org/plugins/maven-reactor-plugin/index.html became 不相容 https://cwiki.apache.org/MAVEN/maven-3x-plugin-compatibility-matrix.html与 Maven3.

maven-invoker-插件 http://maven.apache.org/plugins/maven-invoker-plugin/看起来仍然很有希望。该插件最初设计用于运行集成测试,但可以使用它来扩展,例如编译阶段。 但它要求将子 pom.xml-s 视为资源并动态修改。对于我在这里描述的问题,解决方案过于复杂且不稳定。我更喜欢一些更轻的东西,可以在构建 Maven 模型时在内存中运行。

所以现在我使用配置文件,试图使它们尽可能紧凑。也许过一段时间我需要再次思考这个问题。


现在您可以使用行家瓷砖 https://github.com/maoo/maven-tiles/插件以获得所需的行为。

使用 maven-tiles,您可以在不同的 pom 中定义构建行为,import他们无论你喜欢在哪里。

附有一个工作示例MNG-5102 http://jira.codehaus.org/browse/MNG-5102?focusedCommentId=310175#comment-310175 --> 爸爸3.zip http://jira.codehaus.org/secure/attachment/61530/daddy3.zip

Maven 的仅限继承的紧身衣现已正式去除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何继承多模块 Maven 项目及其所有优点? 的相关文章

随机推荐

  • 尝试避免使用 sapply 进行 for 循环(对于 gsub)

    尽量避免使用for使用以下代码循环sapply 如果可能的话 带循环的解决方案对我来说非常适合 我只是想学习更多 R 并探索尽可能多的方法 目标 有一个向量i和两个向量sf 搜索 和rp 代替 对于每个i需要循环sf并替换为rp哪里匹配 i
  • 带有 Ignited-Datatables 库的服务器端 DataTables

    如何使用 Ignited Datatables 库来服务器端 DataTables 我的应用程序使用 CodeIgniter 我使用的库是Ignited datatables 库 https github com IgnitedDatata
  • SOLR计数多值字段查询

    是否可以创建一个 solr 查询 其中仅返回在多值字段中具有多个条目的文档 例如 docs id 1 myfield hello word hello stackoverflow id 2 myfield hello word 我天真的示例
  • 将数值向量中的 NA 替换为从邻居计算出的值

    我正在尝试写一个替换 函数将给定数值向量中的每个缺失值替换为算术平均值 of 它的前面和后面的元素 例如 如果c 5 NA 6 2 3 5 6 4 NA 2 NA 5 给出 那么结果应该是c 5 5 5 6 2 3 5 6 4 3 2 3
  • 如何在 printf 函数中使用宏

    所以我在我的头文件中定义了这个宏和其他一些宏 define COL1WIDTH 16 我想用它来打印这样的东西 word 25 Dir1 FileB 129 Sat Jan 1 00 00 02 2011 12 1 x4 2 x2 3 x2
  • ASP.NET 中的 jQuery ajax 带有 customErrors mode="On"

    知道如何检索服务器端在执行时抛出的原始异常使用 jQuery 调用 ajax 并使用 自定义错误模式 开 在 web config 中 如果 mode Off 我可以使用此函数获取错误 error function xhr status e
  • C++ 中的重定向

    include
  • TDD 如何应用于基于 Django 类的通用视图?

    由于 Django 中基于类的通用视图涉及框架的一些工作 我发现很难以 TDD 风格使用它们 现在 我使用 TestClient 从 http 模拟堆栈访问视图 但我更愿意在使用 TestClient 进行 功能 测试之前正确地对特定方法
  • 何时在 Linq 中使用 Cast() 和 OfType()

    我知道有两种将类型转换为IEnumerable从一个Arraylist在 Linq 中并想知道在什么情况下使用它们 e g IEnumerable
  • Cassandra/Spark 显示大表的条目计数不正确

    我正在尝试使用 Spark 处理大型 cassandra 表 约 4 02 亿条目和 84 列 但得到的结果不一致 最初的要求是将一些列从该表复制到另一个表 复制数据后 我注意到新表中的一些条目丢失了 为了验证我是否对大型源表进行了计数 但
  • 安卓框架。它是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 Android 框架有几个问题 有人可以回答吗 他们 Android 框架有什么作用 做 它的工作是什么 这些经理是什么 活动经
  • 在 Perl CGI 中分段 AJAX 响应?

    perl cgi 脚本是否可以将其 AJAX 响应分段为多个单独的 HTTP 响应 假设我有这段代码 xmlhttp new XMLHttpRequest xmlhttp onreadystatechange function if xml
  • 如何通过 StructureMap 映射使用 IRepository 约定

    StructureMap 中是否有一种方法可以用一行或约定进行这种重复映射 For
  • 为什么 Dapper 的 .Execute(...) 返回一个 int ?

    任何人都知道为什么 Dapper 返回一个 int Execute 我在任何地方都找不到这个记录 该整数表示受查询影响的行数 它返回一个整数 以便您知道查询是否有效 如果返回零并且您期望某些内容发生变化 那么您就知道存在问题
  • ReadTheDocs 和 autodoc 在构建期间无法找到我的包

    我一直在尝试在 readthedocs 上为我的第一个 python 包 QutiePy 构建文档 在本地构建文档工作正常 但是当我尝试在 readthedocs 上构建时 autodoc 无法填充我的部分并给出以下警告 WARNING a
  • 创建 Node.js Express 应用程序时出错。找不到

    我正在尝试在 WebStorm 中创建一个 node js 项目 你能告诉我我在这里缺少什么吗 得到了解决方案https intellij support jetbrains com hc en us community posts 115
  • C# 中的转义引号以供 JavaScript 使用

    我有一个 ASP Net Web 处理程序 它以 JSON 格式返回查询结果 public static String dt2JSON DataTable dt String s rows if dt Rows Count gt 0 for
  • matplotlib 的 plt.acorr 中自相关图的错误?

    我正在用 python 绘制自相关 我使用了三种方法来做到这一点 1 pandas 2 matplotlib 3 statsmodels 我发现我从 matplotlib 得到的图与其他两个不一致 代码是 from statsmodels
  • 记录到文件还是数据库更好?

    我们仍在使用旧的经典 ASP 并且希望在用户在我们的应用程序中执行某些操作时进行记录 我们将编写一个通用子例程来获取我们想要记录的详细信息 我们是否应该使用以下命令将其记录到 txt 文件中FileSystemObject或者将其记录到 M
  • 如何继承多模块 Maven 项目及其所有优点?

    我找不到一个好的 可扩展的解决方案的问题 我有一个项目可以提供给定工件的多种风格 这是一个多模块项目 目前有 3 个模块 flavor1 模块 flavor2 模块 flavor3 模块 问题是我还有另外 50 个项目需要以相同的方式设置