Maven离线 – mvn-plugins的问题

我在我的项目中使用maven,我需要在非互联网访问机器上运行构建。

当我测试我的项目构建时,一切都正常,但是当我在未来的时刻运行构建 ,maven尝试更新mvn-plugins ,这个sh t *正在破坏我的构建。

我的配置文件:来自mvn的settings.xml

 blaProfile   blaRepo file://${bla.3rdParty.home}/maven/.m2/repository default     blaRepo file://${bla.3rdParty.home}/maven/.m2/repository default     blaProfile  

我跑了我的maven与params:

 mvn -npu -bla.3rdParty.home="$(THE_CORRECT_PATH)" package 

我看到maven尝试更新一些mvn-plugins一段时间,但选项:

 -npu,--no-plugin-updates Suppress upToDate check for any relevant 

应该适用于此更新。

那等待一些帮助!

提前致谢!


UPDATE(1):
我正在看的是,我可以使用以下设置:

 true 

在我的settings.xml中 ,有了这个,我将在$ {user.home} /。m2中有一个plugin-registry.xml ,我可以配置并强制使用maven插件版本。

但它不起作用! 🙁

在脱机之前,请运行以下命令:

 mvn dependency:go-offline 

这将把构建项目所需的所有依赖项和插件下载到〜/ .m2 / repository中。

运行后,您现在可以使用’-o’标志离线构建项目:

 mvn install -o 

要将插件缓存到.m2 / repository文件夹中,您需要使用mvn :help显式指定所有插件mvn :help

您还需要为pom.xml的部分中的每个插件指定显式版本

  org.apache.maven.plugins maven-surefire-plugin 2.19   org.apache.maven.surefire surefire-testng 2.19    

这是确保mvn install -o使用相同的插件版本所必需的。

当然,你还需要运行mvn dependency:go-offline来处理你的编译和测试依赖。

mvn assembly:help compiler:help enforcer:help exec:help failsafe:help install:help jar:help resources:help surefire:help mvn dependency:go-offline mvn compile --offline

在代码上运行mvn clean install就足够了。 下次,当您在脱机模式下运行它时,您可以使用以下选项:

 mvn -Dmaven.repo.local=..\repository –o clean install 

-o告诉maven不要尝试通过网络更新其依赖关系,并使用-Dmaven.repo.local提供包含所有必需依赖关系的存储库路径。 或者,您可以在localRepository标记的settings.xml中添加存储库的路径,并添加true 。 您可以在Maven Eclipse配置中配置相同的配置。

我认为这是因为Maven没有在本地获得元数据以确定其插件版本是否正确。 如果为插件指定了确切的版本(无论如何都是可重复性的好主意),它不需要进行检查,因此不会尝试连接到远程存储库。

通过指定确切的版本,我的意思是在项目的POM中你应该将版本添加到插件声明中。 例如:

   org.apache.maven.plugins maven-dependency-plugin  2.0   

请注意,您还可以通过设置存储库镜像来强制Maven使用内部存储库而不是Central。 有关使用存储库管理器和镜像的详细信息 ,请参阅此答案 。

在您包含的配置中,您将远程存储库设置为指向本地存储库,这不是一个好主意。 要脱机运行,您应该在命令行传递-o或将其添加到settings.xml:

 true