当前位置: 首页 > 知识库问答 >
问题:

Maven Release Plugin with Svn:Externals 和一个多模块项目

邰德业
2023-03-14

给定以下示例多模块项目:

  • aggr/pom.xml(版本1.0-快照)
  • aggr/父/pom.xml(2.0版-快照)
  • aggr/app/pom.xml(版本3.0-SNAPSHOT)
  • aggr/comp1/pom.xml(版本4.0-SNAPSHOT)

其中 parent 是任何其他 pom 的父级,并且应用具有 comp1 的依赖项。

通过发布发布:只要aggr文件夹在svn存储库中具有相同的结构(存储库/主干/aggr/parent.pom,...),准备/执行就可以正常工作。

现在,当我想使用同一个项目,但使用svn:externals时,发布插件不工作,声明comp1:

由于未发布的依赖项而无法发布项目:parent:pom:2.0-SNAPSHOT

存储库结构类似于

  • 存储库/aggr/主干/pom.xml
  • 存储库/父/主干/pom.xml
  • 存储库/应用程序/主干/pom.xml
  • 存储库/comp1/主干/pom.xml

aggr文件夹使用指向模块中继的外部文件,因此签出的工作副本看起来像上面一样。

为什么Maven以不同的方式处理基于外部的模块,有没有办法克服这个问题?

编辑:svn: externals项目的pom-Files。与其他项目的pom-Files唯一的区别是scm标签。在其他非外部项目中,只有聚合器具有scm标签。

外部父-pom.xml

<groupId>small.test</groupId>
<artifactId>parent</artifactId>
<version>2.0-SNAPSHOT</version>

<scm>
    <connection>scm:svn:http://localhost/svn/small-test-ext/parent/trunk/</connection>
    <developerConnection>scm:svn:http://localhost/svn/small-test-ext/parent/trunk/</developerConnection>
    <url>http://localhost/svn/small-test-ext/parent/trunk/</url>
</scm>

<build>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.4.1</version>
    </plugin>
</plugins>

外部 aggr-pom.xml small.test parent 2.0-SNAPSHOT

<groupId>small.test</groupId>
<artifactId>aggr</artifactId>
<version>1.0-SNAPSHOT</version>

<scm>
    <connection>scm:svn:http://localhost/svn/small-test-ext/aggr/trunk/</connection>
    <developerConnection>scm:svn:http://localhost/svn/small-test-ext/aggr/trunk/</developerConnection>
    <url>http://localhost/svn/small-test-ext/aggr/trunk/</url>
</scm>

<modules>
    <module>parent</module>
    <module>comp1</module>
    <module>comp2</module>
    <module>app</module>
</modules>

外部应用程序-pom.xml

<parent>
    <groupId>small.test</groupId>
    <artifactId>parent</artifactId>
    <version>2.0-SNAPSHOT</version>
</parent>
<groupId>small.test</groupId>
<version>3.0-SNAPSHOT</version>

<artifactId>app</artifactId>
<packaging>jar</packaging>

<scm>
    <connection>scm:svn:http://localhost/svn/small-test-ext/app/trunk/</connection>
    <developerConnection>scm:svn:http://localhost/svn/small-test-ext/app/trunk/</developerConnection>
    <url>http://localhost/svn/small-test-ext/app/trunk/</url>
</scm>

<dependencies>  
    <dependency>
    <groupId>small.test</groupId>
    <artifactId>comp1</artifactId>
    <version>4.0-SNAPSHOT</version>
</dependency>

谢谢,康拉德

共有1个答案

缪风史
2023-03-14

在您当前的项目中,您必须为每个项目运行mvn:发布,因为您在不同的svn存储库中有项目或模块。如果您只想运行一个mvn:发布,您的存储库应该如下所示:

svn_repository: branches/
            tags/
            trunk/
                  parent
                  comp1
                  comp2
                  app
                  pom.xml
 类似资料:
  • 我有一个Maven项目,包含几个模块,其结构类似于: 我已经在parent在

  • 关于maven项目结构,我有两个问题: 1)我正在创建一个maven多模块项目,并且想知道是否可以将模块的所有公共依赖项放在父POM中?这是正确的做法吗? 2)如果我正在创建一个包含所有web.xml和JSP文件的maven webapp项目,那么web控制器、侦听器和模型对象应该驻留在哪里?在一个单独的maven jar项目中还是在同一个webapp项目中?

  • 我正在尝试创建一个多模块spring boot项目(Struts2/Ibatis项目的重写),我希望如下所示: 我如何设置每个pom,以便: 非常感谢。

  • 问题内容: 我有学习的背景和思想。 我喜欢使用的其中一项功能是可以将项目制作为多Maven模块。例? 令人高兴的是,每个模块都可以具有自己的依赖性,并且可以独立测试它们,而不用运行一个整体应用程序。 我们如何实现类似的东西,或者它的生态系统? 问题答案: 你绝对可以做到的。这被称为SBT Multi-Project build。您可以使用以下内容定义一个主项目和多个子项目(来自上面的docs链接)

  • 我曾广泛使用过Maven 目前有5个不同的maven项目,每个项目都有一个不同的pom.xml。到目前为止,它们之间存在依赖关系,如果需要,每一个都指向 中的另一个。 现在我们不喜欢的是 当我们发布子projectA时,我们需要手动修改所有将projectA作为依赖项的项目以使用新版本。Saw Maven有一个版本插件,不知道这会有什么帮助。 作为解决方案,我希望在POM之间有一个更干净的组织,并