如何使用另一个本地项目的本地maven快照[重复]

Posted

技术标签:

【中文标题】如何使用另一个本地项目的本地maven快照[重复]【英文标题】:How to use a local maven snapshot of another local project [duplicate] 【发布时间】:2018-01-27 06:22:20 【问题描述】:

我觉得我在这里一定缺乏一些非常非常基本的 Maven 知识。我有一个(几个)maven 项目和一个共享库。这个库应该是一个独立的 maven 项目,有自己的生命周期。我正在尝试使用以下方法将库导入到我的项目中:

<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>nl.whatever.com</groupid>
         <artifactId>my_shared_library</artifactId>
         <version>1.0-SNAPSHOT</groupid>
      </dependency>

      ...
   </dependencies>
</dependencyManagement>

但是 maven 一直在寻找我的复制品,而不是试图找到我的本地构建。最糟糕的是,它一直在寻找一个罐子。我明白了:

Could not resolve dependencies for project my.project:ejb:1.0-SNAPSHOT: Could not find artifact nl.whatever.com:my_shared_library:jar:1.0-SNAPSHOT

我的菜鸟错误是什么?是的,我确实对我的库项目进行了全新安装。

编辑:

我的 .m2 目录有一个设置文件将我的本地复制重定向到

/ws/repro, which contains:
/ws/repro/nl/whatever/com/my_shared_library/1.0-SNAPSHOT/
   my_shared_project-1.0-SNAPSHOT.jar.lastUpdate
   my_shared_project-1.0-SNAPSHOT.pom

还有一些属性文件。

编辑2: 我不认为它是重复的。在发布我的问题之前,我查看了链接的问题。这里不涉及非maven项目或外部jar。

【问题讨论】:

您确认工件 jar 在您本地的 .m2 文件夹中的正确位置吗? 你说你运行了安装,但是你的共享库的 pom 文件是否配置了你在依赖项中定义的信息? 我不认为这个问题与所述问题重复。这不是关于安装外部文件,而是关于构建一个库以便其他项目可以使用它。 @Strelok 根据您的 cmets 更新了问题。我的库的 pom 文件与版本和名称匹配。 【参考方案1】:

您的本地存储库通常位于用户存储库下方的.m2/repository。如果你在你的库项目上做clean install,它应该被安装到这个存储库中(在nl/whatever/com/my_shared_library/...)。然后,您可以在同一台计算机上的所有其他 Maven 项目中使用它。

更重要的是&lt;packaging&gt; 是正确的,即包装需要与您要构建的工件相匹配。如果包装是pom,那么您只需创建一个 pom(如父 pom 或 bom)。省略包装标签暗示你使用包装jar

【讨论】:

为什么要删除 .lastupdate 文件,这如何为我提供我显然需要的 jar? lastupdated 文件阻止您使用 jar,因为它们告诉 Maven 该 jar 不存在。这是没有得到应该存在的罐子的常见原因。您是否查看过本地存储库?它是否包含您使用“全新安装”构建的库? 全新安装会创建 1.0-SNAPSHOT 文件夹,其中包含以下文件:_remote.repositoriesmaven-metadata-localmy_shared_library-1.0-SNAPSHOT.pom。没有罐子。 您的 my_shared_library 是否有条目 pom?如果是这样,请将其删除。 如果不是,显然该 pom 中有一些错误的条目阻止项目被构建为 jar。【参考方案2】:

您应该尝试使用名为repositories 的标签更新您的 pom.xml。

Maven repositories 是存放构建工件和不同类型依赖项的地方。

一个示例 Maven 远程存储库标记及其值是:

<repositories>
  <repository>
    <id>central</id>
    <name>Maven Repository</name>
    <url>http://repo1.maven.org/maven2</url>
  </repository>
</repositories>

要配置多个存储库,您可以关注 guide 并使用 settings.xml 中的配置文件。


附带说明,除非遵循层次结构或使用特定版本的库。您应该使用&lt;dependencies&gt; 而不是&lt;dependencyManagement&gt;,看看differences between dependencymanagement and dependencies in maven。

【讨论】:

会从成员投票中得到一些原因。或者您希望如何改进? 有时不是回答的人需要改进,而是选民。

以上是关于如何使用另一个本地项目的本地maven快照[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Maven 项目中包含本地 jar 文件 [重复]

maven第三方快照包上传一直报错

如何在maven中排除jar包中引入的另一个jar包

如何强制maven下载快照

maven deploy和install的区别

idea怎么在maven工程里引用本地的另外一个maven工程