8

我是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”时,它可以工作。我是否遗漏了什么,或者这个设置根本不可能?

4

2 回答 2

7

虽然可能,但我个人认为这样做不是一个好习惯。根据您的使用情况,这篇文章会有所帮助:http: //blog.sonatype.com/people/2009/02/why-putting-repositories-in-your-poms-is-a-bad-idea。您还想要一个可重现和可移植的项目,这个问题讨论了这个相关主题。请不要为了可移植性而将这些 jars 签入您的 VCS!

如果您仍然坚持,我会尽力提供帮助。要使您的模型正常工作,您的“repo 文件夹”必须遵循此处定义的结构。

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

下载:文件:/j/my-project/my-local-repo/com/google/guava/guava/14.0.1/guava-14.0.1.pom
下载:文件:/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/秒)

您可以看到 guava jar 将从downloaded“repo 文件夹”到我的 .m2 存储库,因为它可以从我的“repo 文件夹”中获得。

于 2013-07-13T01:56:22.537 回答
5

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

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

我将其更改为仅外部存储库:

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

现在我的工件可以在“项目”存储库中找到。但是,Maven 的行为与我预期的不同,正如 ceilfors 所写,文件系统存储库被视为与远程存储库相同 - 工件从那里复制到本地存储库,这导致本地存储库和其他文件系统存储库之间的 jar 重复。所以我看到设置并不理想。但是,就我而言,我仍然发现它是 mavenize 项目的最快方法。

于 2013-07-13T08:18:47.393 回答