如何在不使用本地安装的工件的情况下构建

IAd*_*ter 2 java maven-2 correctness artifacts

有没有办法强制Maven使用远程工件而不是机器上安装的工件?因为我担心运行时错误而不是编译错误构建服务器无效选项.

PS我知道我可以删除或重命名.m2文件夹,但我敢打赌,有一些更聪明的方法可以做到这一点.也许一些插件或特殊命令参数?

Ric*_*ler 7

没有本地存储库意味着您的类路径几乎完全由远程服务器上的URL组成.我不明白为什么这会被支持,因为执行会很糟糕,任何丢弃的连接都会导致类加载器问题.拥有本地存储库可确保在编译/执行开始之前jar可用.

还要考虑WAR和EAR项目(以及许多使用依赖插件)依赖于下载jar来完成其包装.如果必须在每个构建中从远程存储库中检索这些开销,则会产生巨大的开销.我很确定中央管理人员不会热衷于处理这种负担.

一些替代方案供您考虑:

  • 如果要在每个构建上强制使用干净的本地存储库,则可以使用依赖项插件的清除目标.
  • 如果要保持构建隔离,可以通过将-Dorg.apache.maven.global-settings =/path /传递给/ global/settings.xml来使用单独的Maven设置
  • 或者,您可以通过传递-Dmaven.repo.local =/some/repo/path来基于每个构建覆盖本地存储库
  • 如果要避免在每个构建上访问远程存储库,请将<updatePolicy> never </ updatePolicy>添加到远程存储库配置中.这意味着如果您在命令行上使用"-U"开关强制它,Maven将仅检查更新
  • 如果要使用最新版本的依赖项,可以在版本声明中使用LATEST关键字(而不是版本号),但如果依赖项不兼容,则可能存在风险.
  • 如果要获取依赖项的当前发行版,可以在版本声明中使用RELEASE关键字(而不是版本号).这就像LATEST,但往往是最新的稳定版本,而不是最新版本.
  • 如果要在范围内采用最新版本的依赖项,请使用Maven的版本范围表示法,例如[1.0.0,2.0.0]表示从1.0.0到2.0.0的任何版本独占

有关LATEST和RELEASE的更多详细信息,请参阅Maven书的9.3.1.3节.

如果您使用的内部存储库管理器(强制性的NexusArtifactory的在这里引用),清除本地存储库的开销大大降低-你只是有一个增加的本地网络流量负载.