settings.xml与pom.xml中的Maven本地存储库

时间:2013-07-12 23:35:11

标签: maven repository pom.xml

我是Maven的新手。我想使用以下设置:

1)用于下载公共工件的远程存储库

2)下载工件的共享本地存储库,通过将以下内容添加到 settings.xml ,可以很好地工作:

<localRepository>C:/m2repo</localRepository>

3)现在我还想要一个引用工件的存储库    来自一个项目,就像一个老式的“lib”文件夹。

所以我已将以下内容添加到项目的 pom.xml

<repository>
  <id>repo</id>
  <name>repo</name> 
  <releases>
    <enabled>true</enabled>
    <checksumPolicy>ignore</checksumPolicy>
  </releases>
  <url>${project.baseUri}repo</url>
</repository>

我已经将一些jar部署到了“repo”文件夹,但是当我将它们作为依赖项添加到pom.xml中时,它们没有被解析。 Maven只查看共享存储库和远程存储库。当我将“repo”的内容复制到共享的“m2repo”时,它可以工作。我错过了什么或者这个设置根本不可能吗?

2 个答案:

答案 0 :(得分:6)

虽然可能,但我个人认为这样做是一种好习惯。根据您的使用情况,此帖子会有所帮助:http://blog.sonatype.com/people/2009/02/why-putting-repositories-in-your-poms-is-a-bad-idea。您还需要一个可重现且可移植的项目,this question讨论此相关主题。为了便携起见,请不要将这些罐子放入您的VCS!

如果你还坚持,我会尽力帮忙。为了使您的模型有效,您的“repo文件夹”必须遵循定义的here结构。

即使您的“repo文件夹”是本地文件结构,Maven仍会将其视为远程存储库,就像maven central一样。这意味着,无论何时构建项目,Maven都会尝试将jar文件从“repo文件夹”下载到.m2存储库中:

  

正在下载:file:/j/my-project/my-local-repo/com/google/guava/guava/14.0.1/guava-14.0.1.pom
  已下载:file:/j/my-project/my-local-repo/com/google/guava/guava/14.0.1/guava-14.0.1.pom(6 KB,276.3 KB /秒)
  正在下载:http://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
  已下载:http://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom(2 KB,速度为10.4 KB /秒)

你可以看到番石榴罐从“repo文件夹”到我的.m2存储库是downloaded,因为它可以从我的“repo文件夹”获得。

答案 1 :(得分:5)

我的问题的原因是我在settings.xml中镜像了存储库,我将镜像设置为所有存储库:

<mirror>
  <mirrorOf>*</mirrorOf>
</mirror>

我改为只有外部存储库:

<mirror>   
  <mirrorOf>external:*</mirrorOf> 
</mirror>

现在我的工件可以在“项目”存储库中找到。但是,Maven的行为与我预期的不同,因为ceilfors写道,文件系统存储库与远程存储库的处理方式相同 - 工件从那里复制到本地存储库,这导致本地存储库和其他文件系统存储库之间的jar重复。所以我看到设置并不理想。但是,在我的情况下,我仍然发现它是最简单的方法来实现项目。