关于maven的问题

时间:2010-07-28 12:05:08

标签: maven-2

为什么maven从存储库下载依赖项,即使jar存在于我的本地存储库中(一个原因可能是jar没有pom),除了使用-o选项之外,有没有办法绕过它? / p>

2 个答案:

答案 0 :(得分:2)

  

为什么maven从存储库下载[SNAPSHOT]依赖项,即使jar存在于我的本地存储库中

因为这是SNASPSHOT依赖项的预期行为。与固定版本不同,Maven会定期尝试下载给定SNAPSHOT的最新版本。当你依赖于正在积极开发的项目时,这非常有用。来自 Maven参考

  

3.3.1.2. SNAPSHOT Versions

     

Maven版本可以包含字符串   字面意思是项目是   目前正在积极发展。如果   版本包含字符串   “SNAPSHOT”,然后Maven将扩大   此标记为日期和时间值   转换为UTC(协调   通用时间)安装时或   发布此组件。例如,   如果你的项目有一个版本   “1.0-SNAPSHOT”并部署了这个   项目的工件到Maven   存储库,Maven会扩展它   版本为“1.0-20080207-230803-1”如果   你是在11:08部署一个版本   PM于2008年2月7日UTC。其他   单词,当您部署快照时,您   没有发布软件   零件;你正在释放一个   特定组件的快照   时间。

     

你为什么要用这个?快照   版本用于下的项目   积极发展。如果你的项目   取决于软件组件   正在积极发展,你可以   取决于SNAPSHOT版本,和   Maven会定期尝试   从a下载最新的快照   运行构建时的存储库。   同样,如果您的下一个版本   系统将有一个版本   “1.4”,你的项目将有一个   版本“1.4-SNAPSHOT”直到它   正式发布。

     

作为默认设置,Maven不会   检查远程SNAPSHOT版本   库。依赖SNAPSHOT   发布时,用户必须明确启用   下载快照的能力   使用repositorypluginRepository   POM中的元素。

     

发布项目时,您应该这样做   解决SNAPSHOT上的所有依赖项   版本依赖于发布   版本。如果一个项目依赖于   SNAPSHOT,它不稳定   依赖关系可能会随时间而变化。   工件发布到非快照   Maven存储库如   http://repo1.maven.org/maven2不能   取决于SNAPSHOT版本,如   Maven的Super POM有快照   从中央存储库禁用。   SNAPSHOT版本用于开发   仅

如果您确实想要更改此行为,则可以更改启用快照的存储库的updatePolicy

<repositories>
  <repository>
    <id>my-repo</id>
    <name>My Corporate Repository</name>
    <url>http://repo.mycompany.com/maven2</url>
    <layout>default</layout>
    ...
    <snapshots>
      <enabled>true</enabled>
      <updatePolicy>never</updatePolicy>
      <checksumPolicy>fail</checksumPolicy>
    </snapshots>
  </repository>

切换为never会强制您使用手动更新(使用mvn -U)。但要注意,这通常不是人们想要和期待的SNAPSHOT。

对于记录,Maven 3有一个-nsu, --no-snapshot-updates命令行选项,允许抑制SNAPSHOT更新

另见

答案 1 :(得分:0)

您可以通过手动安装文件在本地存储库中生成一个pom:

mvn install:install-file 
    -Dfile=[FILE]
    -DgroupId=[GROUP]
    -DartifactId=[ARTIFACT]
    -Dversion=[VERSION]
    -Dpackaging=jar 
    -DgeneratePom=true
    -DcreateChecksum=true   

编辑:您不希望为快照执行此操作。