Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
带有Svn:Externals和多模块项目的Maven发布插件_Maven_Maven 2_Maven Release Plugin - Fatal编程技术网

带有Svn:Externals和多模块项目的Maven发布插件

带有Svn:Externals和多模块项目的Maven发布插件,maven,maven-2,maven-release-plugin,Maven,Maven 2,Maven Release Plugin,给出以下多模块项目示例: aggr/pom.xml(版本1.0-SNAPSHOT) aggr/parent/pom.xml(版本2.0-SNAPSHOT) aggr/app/pom.xml(版本3.0-SNAPSHOT) aggr/comp1/pom.xml(版本4.0-SNAPSHOT) 其中,parent是任何其他pom的父级,而app的依赖项为comp1 通过release发布:准备/执行只要aggr文件夹在svn存储库(repository/trunk/aggr/parent.pom

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

  • aggr/pom.xml(版本1.0-SNAPSHOT)
  • aggr/parent/pom.xml(版本2.0-SNAPSHOT)
  • aggr/app/pom.xml(版本3.0-SNAPSHOT)
  • aggr/comp1/pom.xml(版本4.0-SNAPSHOT)
其中,parent是任何其他pom的父级,而app的依赖项为comp1

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

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

无法发布项目,因为未发布依赖项:父项:pom:2.0-SNAPSHOT

然后,存储库结构类似于

  • repository/aggr/trunk/pom.xml
  • repository/parent/trunk/pom.xml
  • repository/app/trunk/pom.xml
  • repository/comp1/trunk/pom.xml
aggr文件夹使用指向模块中继线的外部,因此签出的工作副本如上所示

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

编辑:svn:externals项目的pom文件。与其他项目的pom文件唯一不同的是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>
small.test
父母亲
2.0-快照
scm:svn:http://localhost/svn/small-test-ext/parent/trunk/
scm:svn:http://localhost/svn/small-test-ext/parent/trunk/
http://localhost/svn/small-test-ext/parent/trunk/
org.apache.maven.plugins
maven发布插件
2.4.1
外部aggr-pom.xml 小型试验 父母亲 2.0-快照

small.test
aggr
1.0-快照
scm:svn:http://localhost/svn/small-test-ext/aggr/trunk/
scm:svn:http://localhost/svn/small-test-ext/aggr/trunk/
http://localhost/svn/small-test-ext/aggr/trunk/
父母亲
comp1
comp2
应用程序
外部app-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>

小型试验
父母亲
2.0-快照
小型试验
3.0-快照
应用程序
罐子
scm:svn:http://localhost/svn/small-test-ext/app/trunk/
scm:svn:http://localhost/svn/small-test-ext/app/trunk/
http://localhost/svn/small-test-ext/app/trunk/
小型试验
comp1
4.0-快照

谢谢
Konrad

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

svn_repository: branches/
            tags/
            trunk/
                  parent
                  comp1
                  comp2
                  app
                  pom.xml

您的主要问题是没有为所有模块等使用相同的版本。此外,您可以显示pom文件吗?除此之外,为什么要使用外部创建多模块结构而不创建没有外部的真实结构?实际项目的模块和父级正在多个项目中使用。因此,我必须依赖外部,不能在整个项目中使用相同的版本。这不是一个真正的原因,因为如果你有一个多模块构建,你可以单独使用模块。因此,如果不将文件夹结构更改为单个SVN树而不是使用外部,则无法运行它。这正是我正在做的。谢谢你知道有没有一个插件自动调用release:prepare for all submodules(按正确的顺序准备所有子模块)?如果你的问题从2.0开始就处于推送阶段,他们添加了一个属性“DcommitByProject”,可以提交每个项目,这样子模块就可以工作了。我在根模块和子模块上执行此命令,mvn版本:prepare-DcommitByProject=true
svn_repository: branches/
            tags/
            trunk/
                  parent
                  comp1
                  comp2
                  app
                  pom.xml