Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有各种不同依赖项的Maven多模块项目设置_Maven_Maven 3_Maven Release Plugin_Multi Module - Fatal编程技术网

具有各种不同依赖项的Maven多模块项目设置

具有各种不同依赖项的Maven多模块项目设置,maven,maven-3,maven-release-plugin,multi-module,Maven,Maven 3,Maven Release Plugin,Multi Module,让我先说一句:我对Maven是全新的。也就是说,我四处搜索,但没有找到以下问题的答案。我找到了类似问题的答案,但不是这个场景。或者我只是误解了答案,这可以通过简单的多模块设置来解决 我将具有以下依赖关系层次结构: database | | | +---core | | | | | +---business | | | | | +------App1 | | | | | +

让我先说一句:我对Maven是全新的。也就是说,我四处搜索,但没有找到以下问题的答案。我找到了类似问题的答案,但不是这个场景。或者我只是误解了答案,这可以通过简单的多模块设置来解决

我将具有以下依赖关系层次结构:

database
|  |
|  +---core
|      |  |
|      |  +---business 
|      |        |
|      |        +------App1
|      |        |
|      |        +------App2
|      |
|      +---------------App3
|
+----------------------App4

我想让它正常工作,这样更改只会导致任何“上游”模块/应用程序的新版本。这确实是多模块maven设置的一个简单案例,还是我需要做其他事情?

如果您希望发布一个组件会产生每个项目的新版本,只需使用:

文档 根据doc,这将:

  • 检查源中是否没有未提交的更改
  • 检查是否没有快照依赖项
  • 将POMs中的版本从x-SNAPSHOT更改为新版本(系统将提示您输入要使用的版本)
  • 转换POM中的SCM信息以包括标记的最终目的地
  • 对修改后的POM运行项目测试,以确认一切正常
  • 提交修改后的POM
  • 用版本名标记SCM中的代码(将提示输入)
  • 将POMs中的版本切换到新值y-SNAPSHOT(也会提示输入这些值)
  • 提交修改后的POM
由于maven的多模块结构,它们被链接在一起,每个项目都会被添加到一个新的版本中

简而言之,这将:

  • 移动版本1.0-快照-->1.1-快照
  • 标签1.0
  • 生成1.0.jar(ou war或其他任何内容)
插件使用 假设正确定义了SCM,并配置了存储库和分发管理,只需添加以下行


[...]
[...]
[...]
org.apache.maven.plugins
maven发布插件
2.4.2
v@{project.version}
[...]
[...]
[...]
打电话

mvn release:prepare
mvn release:perform
继承与依赖

你可以考虑两种不同的方法:

  • 继承,即父模块和多/子模块
  • 换句话说,聚合:依赖项的使用
在多maven项目中,所有模块(包括父模块)共享相同的生命周期。释放一意味着释放所有,因此,只释放一个是没有意义的

在您的情况下,您不能在不影响应用程序4的情况下将应用程序1修改为3。 如果应用程序4依赖于应用程序1,显然应用程序1不能依赖于应用程序4(不允许循环引用)

因此,如果要将App4和App1隔离到3个生命周期,则不应使用多个模块,而应共享一个父项目或pom的层次结构,如corporate>main project>sub project(非子模块)。 之后,只需声明应用程序4和应用程序1之间的依赖关系。(…转换为app4 pom.xml)

另一个想法是:项目和子模块的名称听起来很奇怪。“经典”层次结构通常是(考虑到大型项目的多业务对象域):


因此,数据库很少处于层次结构的顶端。

您所说的“更改只会导致任何“上游”模块/应用程序的新版本”是什么意思?您想让App4只使用业务或核心的所有子级的发布版本吗?你想发布一个项目会导致所有对象的全新发布吗?数据库的更改会影响所有应用,因为所有应用都依赖于它。核心的变化只会影响应用程序1、2和3,业务的变化只会影响应用程序1和2。是的,我希望它能发布所有应用程序的全新版本(基于我刚才提到的逻辑)。此外,仅发布App4时,应仅
jar
(这是Java)数据库模块和App4.OK的文件,因此您应该调整层次结构。我会在一个。。。没几次!你说的“调整你的层次结构”是什么意思?请看下面的答案,用几句话来说,我认为数据库不应该位于你的层次结构的顶部,如果你想让两个项目有两个不同的生命周期,你不能将它们用作同一个项目的子模块。谢谢你的回答。只有一件事:在我的示例中,数据库实际上位于层次结构的底部(尽管它实际上位于图片的顶部)。我想说明的是,模块数据库由所有应用程序共享。OK。这更清楚,我认为答案仍然合适。这能回答你的问题吗?
Main Project (sometimes EAR) --> POM 
|-- Business Object / DAO --> POM
|   |-- Domain 1 --> JAR
|   `-- Domain 2 --> JAR
|-- Core (depends on BO)  --> JAR
`-- IHM / Web App (depends on core)  --> WAR