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

Maven Release插件:强制使用特定版本的scm提供程序

奚高扬
2023-03-14

我正在尝试将我们的存储库从SVN迁移到Git,我在一个非常大的项目中遇到了发布插件的问题。

问题:

这个项目有大约50个子模块,它试图将所有修改后的pom添加为一个git add -- '. 这打破了windows命令行的限制。

幸运的是,在maven-scm-提供者-gitexe的版本1.8.1中对此进行了修复,但是maven-resess-plugin目前设置为使用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 plexus Os.isFamily(Os.FAMILY\U Windows),以确保在我的机器上返回true。

我错过了什么?如何强制发布插件使用正确版本的scm插件?

共有3个答案

步建茗
2023-03-14

按照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

我相信这并不是你一直在寻找的答案之王,但我认为这可以帮助你走上正确的道路,如果你不这样移动你的所有项目,至少它会缩短你的列表,也许还能帮助你解决问题。

堵鸿光
2023-03-14

愚蠢的问题,但是,你有没有想过将所有这些子模块移动到他们自己的git项目中?然后分别释放它们?

公羊涛
2023-03-14

根据maven版本插件2.4.1变更日志http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11144

  • 所以你应该试试2.4版本。它应该可以工作,也许你不会受到这个bug的影响
  • 或者等待将来的版本

编辑:该错误与此SCM错误相关:http://jira.codehaus.org/browse/SCM-686

一条评论说使用maven-scm-filent-gitexeANDmaven-scm-filent-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>
 类似资料:
  • 问题内容: 为了利用C 11和c 14功能,我有一个使用较新版本的gcc(4.9.1)和较新的libstdc 编译的应用程序。该应用程序由许多小程序组成,因此我将libstdc 作为共享库而不是静态库进行链接(即,我不希望使用-static-libstdc ++) 我希望将新版本的libstdc ++与应用程序一起放在/ opt // lib64下(注意:GPL的例外明确允许这样做) libstd

  • 渐变-泊坞插件和Spring靴版本 2.0.0.M4 M4 使用较新的客户端,并且使用 docker 插件以异常结尾,存在一个问题: 我的主项目中的构建脚本: 如您所见,我们加载spring-boot-gradle-plugin version=2.0.0。M4及其所有依赖项。 我的子项目构建:gradle: 最重要的是,docker.gradle文件与子项目的build.gradle文件位于同一

  • 问题内容: 自从升级到我使用的一种IDEA插件的最新版本以来,我遇到了问题。我可以从其网站上下载该插件以前版本的ZIP文件,但是找不到有关如何 手动安装特定版本 插件的安装说明。 有人知道怎么做吗? 问题答案: 想想您可以简单地将jar放到plugins目录中: 在Windows上:

  • 我正在与Maven一起使用Pact JVM/Java(Version3)。中没有项目版本控制--它只是版本。在Pact Maven插件中配置的与Maven project version-相同。 我应该玩和吗?我是否应该升级到Pact版本4并使用消费者版本选择器?

  • 问题内容: 我由大约40个开发人员组成的团队工作,我不希望任何开发人员使用任何开发人员都可以使用的特定API(准确地说是java.sun.Base64),而是让他们使用sun API的替代方法作为其专有。 是否有用于maven的插件,通过这些插件在pom.xml中指定受限制的软件包,如果在代码中的任何位置使用了这些软件包中的任何一个,则构建将中断? 还是有一种更优雅的方式来做到这一点? 谢谢 问题

  • 我试图使用maven发布插件来创建一个Java项目的发布版本,该项目将Performe作为SCM。 我的pom scm部分是: 我还使用P4Maven插件和Maven发布插件: 当调用“mvn release:prepare-DdryRun=true”时,我得到 有什么想法吗? 我可以调用mvn scm:checkout。