我应该在我的pom.xml中编写存储库吗?

Dim*_*ims 11 repository m2eclipse pom.xml maven

我是Maven的新手.如果我用Maven开始新项目,我应该知道它的任何存储库URL吗?

例如,这个Hibernate教程http://docs.jboss.org/hibernate/core/3.3/reference/en/html/tutorial.html说明了如何使用pom.xml文本创建示例项目.但是这个pom.xml不包含任何存储库.

所以,我的m2eclipse插件说,例如Project build error: 'dependencies.dependency.version' for org.hibernate:hibernate-core:jar is missing.,pom.xml中的所有依赖标记

这是因为存储库缺席吗?

在哪里知道存储库URL?有一个大的存储库吗?为什么默认不包括在内?

更新1 据说,Maven默认使用"中央"存储库:http://maven.apache.org/guides/introduction/introduction-to-repositories.html

我在那里搜索了hibernate-code artifact并找到了它.所以,这个工件在中央存储库中.由我的maven说依赖没有找到.因此它不使用它的中央存储库.为什么?

Tom*_*icz 17

显然你的Hibernate依赖项缺少<version>标记:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>3.6.9.Final</version> <!-- this line is missing -->
</dependency>
Run Code Online (Sandbox Code Playgroud)

请注意,您不必指定先前声明的依赖项的版本<dependencyManagement>.

老答案:

每个构建脚本(不仅与Maven)都应该是可重现的,并且与环境无关.每个继承自的标准pom.xml(称为super pom)pom.xml已经定义了主Maven中央存储库:

<repositories>
  <repository>
    <id>central</id>
    <name>Maven Repository Switchboard</name>
    <layout>default</layout>
    <url>http://repo1.maven.org/maven2</url>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)

您不必定义此存储库,如果所有依赖项都存在,则不必定义任何其他存储库.另一方面,如果您使用的是某些外部存储库,则必须将它们添加到其中pom.xml,以便每个开发人员始终能够构建.

底线是:如果您可以构建具有完全空存储库的项目,那么您可以pom.xml.


Agu*_*hez 6

不建议在 POM 文件中定义存储库,因为这会导致很多问题(Maven 将在这些存储库中搜索任何工件,甚至是 Central 中可用的工件,可移植性差,...)

最佳方法:设置存储库管理器(Artifactory、Nexus)并编辑 settings.xml 文件以使用存储库管理器作为镜像。

第二种最佳方法:在 settings.xml 文件中定义所需的存储库,而不是在 pom.xml 文件中。

poms 中的存储库是一个坏主意。

  • 将非标准存储库放入“settings.xml”文件中意味着每个新开发人员还必须编辑该文件。将非标准存储库放入“pom.xml”文件(将其签入源代码管理)意味着每个开发人员都可以构建。但是,是的,您对存储库服务器的身份验证应该位于您的 _private_ `settings.xml` 文件中。 (5认同)
  • 这些人不同意 @Augusti 关于 POM 中存储库的回答:/sf/ask/155787481/ XML (4认同)