2016-05-09 48 views
2

我想用两个不同的分类器部署两个罐子工件,但由于两者都提供了它们自己的版本pom.xml,所以目前失败。我该如何解决这个问题,以便两个pom.xml可以与他们的工件一起上传?Maven从两个单独的pom.xml部署两个不同分类器的罐子

示例 - 我有com.test.company.somelib-1.0.0-cmp1.jarcom.test.company.somelib-1.0.0-cmp2.jar,其中cmpX是一个分类器。这两个软件包都包含(逻辑上)相同的代码和类(具有相同的版本),但它们在预处理方式上略有不同。分类器注释是由于我们需要维护的向后兼容性。

长话短说,第一件神器上传正常,第二件失败,Forbidden,因为我们的存储库不允许覆盖工件(我想保留它)。

有一个稍微不同的管道可以创建两个包,所以它们的构建很容易分开。我只想将它们部署为两个具有相同名称和不同分类器的软件包。

感谢您的帮助


编辑:有人建议使用Maven的配置文件。我可以看到他们会工作,但他们不会很理想。

考虑下图中描述的设置 - 有一个CI服务器(TeamCity)。

  • 有一个“启动器”构建(来源)。这个版本检出所有必需的源文件。
  • 从这个初学者构建几个其他版本被触发(处理使用x.x.x/编译)。其中的每一个构建都会调整一个template-pom.xml(填充特定的classifier和其他信息),然后构建它的工件并将其部署到我们的Artifactory。

enter image description here

随着我要实现的,如果我决定要添加其他处理,建立的设置,所有我需要做的就是添加一个“分支”。如果我使用配置文件,我还需要将一个新配置文件添加到pom.xml文件中。

请纠正我,如果我错了。配置文件似乎能够实现目标,但不是理想的,至少在我的情况下。

+0

难道我理解你的权利 - 你有两个不同的POM文件,但它们具有相同的GroupId的artifactId版本和因此在部署第二个时会被禁止? – mediahype

+0

是的,这是正确的。文件的名称是不同的(分类器),但它们的pom.xml名称是相同的 - 当pom.xml被上传时,我得到了禁止。 –

+0

归结为以下问题:编译时需要* runtime * .jar文件吗?因为从名称看,它看起来不像 – mediahype

回答

1

我强烈建议拥有2个(或更多)具有相同GAV的不同pom文件。

但我知道您的需求是由传统原因引发的。 我还没有尝试过这个,但它可以工作: 让你现在拥有一个build(= maven项目)。在其他构建跳过正常的部署和手动调用部署插件,像这样的部署文件的目标:

<build> 
    <plugins> 
    <!-- skip normal execution of deploy plugin --> 
    <plugin> 
     <artifactId>maven-deploy-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>default-deploy</id> 
       <configuration> 
        <skip>true</skip> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

    <!-- invoke with goal: deploy-file --> 
    <plugin> 
     <artifactId>maven-deploy-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>someId</id> 
       <phase>deploy</phase> 
       <goals> 
       <goal>deploy-file</goal> 
       </goals> 
       <inherited>false</inherited> 
       <configuration> 
       <file>path-to-your-artifact-jar</file> 
       <generatePom>false</generatePom> 
       <artifactId>xxx</artifactId> 
       <groupId>xxx</groupId> 
       <version>xxx</version> 
       <classifier>xxx</classifier> 
       <packaging>xxx</packaging> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 
+0

我与我重构此产品的经理进行了交谈,并且我们同意为每个运行时版本使用单独的组/工件。这样我们就可以摆脱分类器,并且对Maven的攻击变得更少了。他们将不得不改变一些东西,但似乎是值得的。尽管谢谢你的回答 –

相关问题