我正在尝试将我们的存储库从SVN迁移到Git,我在一个非常大的项目中遇到了发布插件的问题。
问题:
这个项目大约有50多个子模块,它试图将所有修改后的pom添加为一个"git-add--"。这打破了windows命令行的限制。
幸运的是,在maven scm提供商gitexe的1.8.1版本中对此进行了修复,但maven发布插件目前设置为使用1.7,而1.7没有修复。
我已经尝试将以下内容添加到我的根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丛Os.isFamily(Os.FAMILY_Windows),以确保在我的机器上返回true。
我错过了什么?如何强制发布插件使用正确版本的scm插件?
根据maven发布插件2.4.1changeloghttp://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11144&版本=19050,由于"git status--瓷"的错误,SCM在此版本中已回落到1.7。
- 所以你应该试试2.4版本。它应该可以工作,也许你不会受到这个bug的影响
- 或者等待将来的版本
编辑:该错误与此SCM错误有关:http://jira.codehaus.org/browse/SCM-686
一条评论说使用maven-scm-provider-gitexe
和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>
这个问题很傻,但是,你有没有想过在自己的git项目中移动所有这些子模块?然后单独发布?
按照Aurelian的建议,将子项目提取到单独的模块中。遵循这个原则会让你的生活更简单。您不必为了发布而发布没有更改的模块。此外,构建时间将减少。如果你看看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
我相信这不是你想要的答案之王,但我认为这可以帮助你走上正确的道路,如果你不这样移动所有的项目,至少会缩短你的列表,也许会帮助你解决问题。