让我刚刚说这个:我是新的maven。这表示我搜索了,但没有找到以下问题的答案。我找到了类似问题的答案,而不是这种情况。或者我可能只是误解了答案,这可以简单地解决了一个多模块设置。

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

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

我想使它工作,以便只会改变任何“上游”模块/应用程序的新版本。这确实是一个简单的多模块maven设置的情况,还是我需要做别的东西?

有帮助吗?

解决方案

如果您希望释放一个组件会产生每个项目的新版本,只需使用 maven-reforms-plugin http://maven.apache.org/maven-release/maven-release-plugin/

文档

根据DOC,这将是:

  • 检查源中没有未提交的更改
  • 检查没有快照依赖性
  • 将POM中的版本从X-Snapshot更改为新版本(系统将提示您使用的版本)
  • 将POM中的SCM信息转换为包括标签的最终目标
  • 运行对修改的poms的项目测试,以确认一切顺序
  • 提交修改的poms
  • 标记使用版本名称的SCM中的代码(这将提示为)
  • 将poms中的版本置于新值y-snapshot(这些值也会提示)
  • 提交修改的poms

由于Maven多模块结构,它们链接在一起,每个项目都将被撞到新的版本中。

用几个字,这将:

  • 移动版本1.0-snapshot - > 1.1-snapshot
  • 标签1.0
  • 生成1.0.jar(our或其他任何东西)

插件使用

假设SCM被正确定义,并且已配置的存储库和分发管理,只需添加这些行

<project>
  [...]
  <build>
    [...]
    <plugins>
      [...]
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.4.2</version>
        <!-- optional, basic format is ${project.artifactId}-${project.version}.${project.type}-->
        <configuration>
          <tagNameFormat>v@{project.version}</tagNameFormat>
        </configuration>
      </plugin>
      [...]
    </plugins>
    [...]
  </build>
  [...]
</project>
.

并致电

mvn release:prepare
mvn release:perform
.

继承vs依赖关系

您可以考虑两个不同的Maven批准:

  • 继承,意味着父母和多/子模块
  • 聚合,换句话说:使用依赖性

在多maven项目中,所有模块(包括父级)共享相同的生命周期。释放一个意味着释放所有,因此,只释放一个是非感觉。

在您的情况下,您无法修改App 1到3个影响App 4。 如果APP 4取决于APP 1,显然APP 1不能取决于APP 4(不允许循环引用)。

所以,要将App4和App1隔离为3个生命周期,您不应该使用多模块,而是仅共享父项目,或者像公司>主项目>子项目(不是子模块)一样的POM的比尔拉奇。 之后,只需声明App 4和App 1.(...进入App4 Pom.xml)之间的依赖项

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

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
.

所以,数据库很少位于层次结构的顶部。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top