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

时间:2012-01-19 19:58:50

标签: maven repository m2eclipse pom.xml

我是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中的所有依赖标记

这是因为存储库缺席吗?

在哪里知道存储库网址?有一个大的存储库吗?为什么默认不包含它?

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

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

2 个答案:

答案 0 :(得分:16)

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

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>3.6.9.Final</version> <!-- this line is missing -->
</dependency>

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

旧答案:

每个构建脚本(不仅与Maven一起)都应该是可重现的,并且与环境无关。每个pom.xml继承的Standard pom.xml(称为 super pom )已经定义了主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>

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

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

答案 1 :(得分:1)

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

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

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

Repositories in poms is a bad idea.