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

Java 如何在不使用本地安装的构件的情况下进行构建,java,maven-2,correctness,artifacts,Java,Maven 2,Correctness,Artifacts,有没有办法强迫Maven使用远程工件而不是安装在您机器上的工件?因为我担心运行时错误而不是编译错误,所以构建服务器是无效的选项 另外,我知道我可以删除或重命名.m2文件夹,但我打赌有更聪明的方法。可能是一些插件或特殊命令参数 没有本地存储库意味着您的类路径几乎完全由远程服务器上的URL组成。我不明白为什么会支持它,因为执行会很糟糕,任何断开的连接都会导致类加载器问题。拥有本地存储库可以确保JAR在编译/执行开始之前可用 还考虑了WAR和EAR项目(以及许多使用依赖插件)依赖于下载JAR来完成它们

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


另外,我知道我可以删除或重命名.m2文件夹,但我打赌有更聪明的方法。可能是一些插件或特殊命令参数

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

还考虑了WAR和EAR项目(以及许多使用依赖插件)依赖于下载JAR来完成它们的打包。如果必须在每次构建时从远程存储库中检索这些内容,则会产生巨大的开销。我敢肯定,中央银行的经理们不会热衷于处理这一问题

您需要考虑的一些备选方案:

  • 如果您想在每个构建中强制使用干净的本地存储库,那么可以使用依赖插件的目标
  • 如果希望保持构建隔离,可以通过传递-Dorg.apache.Maven.global settings=/path/to/global/settings.xml来使用单独的Maven设置
  • 或者,您可以通过传递-Dmaven.repo.local=/some/repo/path,在每个构建的基础上覆盖本地存储库
  • 如果您希望避免在每次生成时命中远程存储库,请永远不要将其添加到远程存储库配置中。这意味着只有在命令行上使用“-U”开关强制更新时,Maven才会检查更新
  • 如果要获取依赖项的最新版本,可以在版本声明中使用最新关键字(而不是版本号),尽管如果依赖项不兼容,这可能会有风险
  • 如果要获取依赖项的当前发布版本,可以在版本声明中使用release关键字(而不是版本号)。这是最新的,但往往是最新的稳定的建设,而不是最新的
  • 如果要在某个范围内获取依赖项的最新版本,请使用Maven的版本范围表示法,例如[1.0.0,2.0.0]表示从1.0.0包含到2.0.0独占的任何版本
有关最新版本的详细信息,请参阅


如果您使用内部存储库管理器(此处为必填项和引用),则清除本地存储库的开销将大大减少—您只会增加本地网络流量负载。

我认为没有真正的方法来满足您的要求。您可以根据快照版本进行研究(但这意味着将上游项目的版本字符串更改为快照版本)

顺便说一句,最近的一次会议对此进行了详细讨论。我不认为他们最终会找到解决方案,但你可能会从中得到一些好的想法


我也喜欢其中的一些,我会自己研究。

我希望找到一些插件来检查我是否有最新版本的lib,以及我是否手动安装了一些东西,而不是忽略这些并使用repo的最新版本。在这种情况下,看看这个问题,告诉Maven如何始终使用最新版本:@01,我添加了three更多选项、版本范围、最新版本或发布版本可能是您所追求的