我有公司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显示为插件存储库。我希望。
答案 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遇到了同样的问题。