我正在尝试将我们的存储库从SVN迁移到Git,而我在一个非常大的项目中遇到了发布插件的问题。
问题:
这个项目大约有50多个子模块,它试图将所有修改过的poms添加为一个'git add - '。这会破坏Windows命令行限制。
幸运的是,在maven-scm-provider-gitexe的1.8.1版本中已经修复了这个问题,但maven-release-plugin目前设置为使用1.7而没有修复。
我已经尝试将以下内容添加到我的root pom.xml中,但我仍然可以看到它在mvn版本中下载1.7:准备甚至以详细模式运行该过程都没有表明它正在使用1.8.1。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>perform</goal>
</goals>
<configuration>
<pomFileName>subproj/pom.xml</pomFileName>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-api</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-gitexe</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
</plugin>
我还尝试将以下内容添加到pom.xml中,以防强制它使用正确的版本而不再运气。
<extensions>
<extension>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-gitexe</artifactId>
<version>1.8.1</version>
</extension>
</extensions>
我怀疑它没有使用1.8.1的原因是它仍然无法尝试使用所有pom文件进行git添加,而我已经检查了插件源代码,它看起来应该是单独添加每个文件Windows(我甚至仔细检查了codehaus plexus Os.isFamily(Os.FAMILY_WINDOWS)以确保在我的机器上返回true。
我错过了什么?如何强制发布插件使用正确版本的scm插件?
答案 0 :(得分:4)
根据maven发布插件2.4.1 changelog http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11144&version=19050,由于'git status --porcelain'的错误,SCM在此版本中已经回落到1.7。
编辑: 该错误与此SCM错误有关:http://jira.codehaus.org/browse/SCM-686
评论说要使用maven-scm-provider-gitexe
AND maven-scm-provider-git-commons
作为依赖项
<dependencies>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-gitexe</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-git-commons</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
答案 1 :(得分:1)
愚蠢的问题,但是,你有没有想过将所有这些子模块移动到他们自己的git项目中?并单独发布它们?
答案 2 :(得分:0)
正如Aurelien建议的那样,将子项目提取到单独的模块中。遵循这一原则将使您的生活更简单。您不必释放没有更改的模块,只是为了发布。此外,构建时间将被删除。如果您查看Github上托管的大多数Java项目,您会发现很多人已将每个模块提取到单独的项目中。 Git主要用于处理较小的存储库。
您可以像这样提取子目录的历史记录:
git remote rm origin
git filter-branch --subdirectory-filter ${project} HEAD
git remote add origin git@foo.com:path/to/${project}.git
git branch --set-upstream master origin/master
git push
我相信,不是你要找的答案之王,但我认为这可以帮助你走上正确的道路,如果你不移动这样的所有项目,至少,它会缩短你的清单,也许,帮助你解决问题。