安装具有父项依赖项的maven项目

时间:2014-03-09 01:04:54

标签: maven pom.xml

我有一组从常见的maven项目继承的相关项目。 由于它们仍处于alpha版本,因此它们(包括父级)都部署在Sonatype快照存储库中,而不是Maven central。

访问maven中心的配置位于我的应用程序的父项目中。 所以它的POM指定为其父级:

...
<parent>
  <groupId>org.sonatype.oss</groupId>
  <artifactId>oss-parent</artifactId>
  <version>7</version>
</parent>
...

并在Sonatype中设置相应的存储库:

...
<repositories>
    <repository>
    <id>snapshots-repo</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    <releases>
      <enabled>false</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
  </repository>
</repositories>
...

因此子项目不必重复此配置。 父母还提供了我所有项目共有的许多其他内容。 目前,我将所有这些项目保存在不相关的目录中。

现在,如果我的应用程序的用户签出我的某个项目并尝试使用mvn install进行安装,则会收到错误:Non-resolvable parent POM: Could not find artifact ...

这对我来说很有意义,因为项目无法访问Sonatype存储库(例如,用于下载父级),因为它恰好是包含如何连接到此类存储库的父级。

我不想要求用户首先安装父项目,因为他应该只需一步即可安装他需要的东西。

那么分发我的库的推荐方法是什么,以便用户可以用一个命令安装它们中的任何一个?

我发现我可以在每个项目中包含父POM(例如,使用git子模块),因此可以在本地解析父项。但我想知道这是否是组织这个(?)的最佳方式。任何更好的选择都值得赞赏。

更新

我将此添加到〜/ .m2 / settings.xml中,因此可以在Sonatype快照存储库中解析父POM。显然它工作正常,父POM被解析为任何其他依赖。

<profiles>
  <profile>
     <id>allow-snapshots</id>
        <activation><activeByDefault>true</activeByDefault></activation>
     <repositories>
       <repository>
         <id>snapshots-repo</id>
         <url>https://oss.sonatype.org/content/repositories/snapshots</url>
         <releases><enabled>false</enabled></releases>
         <snapshots><enabled>true</enabled></snapshots>
       </repository>
     </repositories>
   </profile>
</profiles>

1 个答案:

答案 0 :(得分:0)

如果您希望将其保持一步安装,则必须在项目pom中列出足够的信息,即:

  • 没有父pom,将所有信息都放入每个项目pom
  • 告诉maven在哪里可以找到您的其他项目。列出每个项目文件中的sonatype shnapshot repo。

存储库管理器仅帮助有权访问它的人。如果用户在一个组织中,那就没问题。使用sonatype存储库可以实现更广泛的循环。