当通过存储库访问父pom时,将忽略父pom中的<pluginrepository>

时间:2015-12-03 10:27:51

标签: maven

我有公司maven存储库。我有公司超级pom.xml,其中<repository><pluginRepository>部分指向公司回购。公司超级pom是分离的神器。

我开发了我的maven项目。父母pom是公司超级pom。为了在清洁环境中传递构建,我需要在项目主目录中再次定义<repository>,因为Maven必须知道可以找到父pom的位置(参见Catch-22

我很高兴我在项目中再次定义了公司存储库,但我接受了它。

在我的项目中,我使用公司插件。问题是Maven无法找到公司插件。这很奇怪,因为maven找到了<pluginRepository>的超级pom,但是没有使用插件存储库来查找插件!所以我必须再次定义<pluginRepository>

Super pom:

<repositories>
    <repository>
        <id>company-repo</id>
        <url>http://mycompany.com/repo</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>company-repo</id>
        <url>http://mycompany.com/repo</url>
    </pluginRepository>
</pluginRepositories>

我的项目pom:

<!-- required to find company super pom - unhappy but accepted-->
<repositories>
    <repository>
        <id>company-repo</id>
        <url>http://mycompany.com/repo</url>
    </repository>
</repositories>
<!-- required to find company plugin - unhappy and hard to accept-->
<pluginRepositories>
    <pluginRepository>
        <id>company-repo</id>
        <url>http://mycompany.com/repo</url>
    </pluginRepository>
</pluginRepositories>

问题:是否可以避免在每个Maven项目中重复插件存储库配置?也许我应该改变我的设计/配置/其他什么?

有趣的是,如果通过相对路径而不是通过存储库访问超级pom,则不需要<pluginRepositories>

Maven 3.3.3

更新:

如果我从我的项目pom中删除<pluginRepositories>,那么effective-pom不会将company-repo显示为插件存储库。我希望。

2 个答案:

答案 0 :(得分:0)

最简单的是setup your settings.xml file like this:

<settings>
  <mirrors>
    <mirror>
      <!--This sends everything else to /public -->
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://localhost:8081/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <id>nexus</id>
      <!--Enable snapshots for the built in central repo to direct -->
      <!--all requests to nexus via the mirror -->
      <repositories>
        <repository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <!--make the profile active all the time -->
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
</settings>

使用存储库管理器可以让生活更轻松......除此之外,您当然可以使用single pom which could be made。但是,无法为开发人员更改父级,您无法更改CI解决方案(如Jenkins)以配置相应的settings.xml

答案 1 :(得分:0)

尽管对这个问题的回答很晚,但我相信我也遇到了同样的问题,而实际上与Maven无关。我们将Artifactory用作工件的本地存储,并且在下载pom时将其设置为剥离存储库/ pluginRepository信息。可以在存储库的“配置”面板中禁用此行为。

https://www.jfrog.com/jira/browse/RTFACT-5343

我想您在Artifactory遇到了同样的问题。