我是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说依赖没有找到。因此它不使用它的中央存储库。为什么呢?
答案 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文件中。