我是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”时,它可以工作。我错过了什么或者这个设置根本不可能吗?
答案 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重复。所以我看到设置并不理想。但是,在我的情况下,我仍然发现它是最简单的方法来实现项目。