3

问题:你有一个压缩的 java 项目分布,它依赖于几个库,如 spring-core、spring-context、jacskon、testng 和 slf4j。任务是使事物可以离线构建。可以使用所有必需的库 jar 创建项目范围的本地存储库。

我试过这样做。看起来即使项目包含 javac 和运行时所需的 jar,构建仍然需要互联网访问。Maven 仍会潜入网络以获取构建所需的大部分自己的插件。我假设 maven 使用空的 .m2 目录运行(因为这可能是构建的第一次启动,可能是离线构建)。不,我不同意沿项目本身分发完整的 maven repo 快照,因为这对我来说看起来一团糟。

一点背景知识:更广泛的任务是创建 Windows 便携式风格的 JDK/IntelliJ Idea 分发,该分发与项目一起使用,并允许在 IDE 中进行一些最少的 Java 编码/运行,具有最少的配置和最少的 Internet 访问。该项目针对计算机班的学生,他们很少或根本无法控制系统配置。在离线模式下保持控制台构建系统完整是可取的,但我猜 maven 过度依赖网络,所以我不得不放弃它,转而使用好的老蚂蚁。

那么,您的意见是,我们能否将第一个 maven 构建完全移至离线模式?我的直觉是,最初的 maven 发行版只包含从主仓库中拉出必要插件所需的最低限度,并且如果没有至少一次看到主仓库,它就不能完全发挥作用。

4

3 回答 3

9

Maven 有一个“-o”开关,允许您离线构建:

 -o,--offline                           Work offline

当然,你需要将你的依赖项缓存到你$HOME/.m2/repository的文件中,这样才能在没有错误的情况下构建它。您可以使用以下方式加载依赖项:

mvn dependency:go-offline

我尝试了这个过程,但它似乎并没有完全起作用。我做了一个:

rm -rf $HOME/.m2/repository
mvn dependency:go-offline       # lot of stuff downloaded
# unplugged my network
# develop stuff
mvn install                     # errors from missing plugins

然而,起作用的是:

rm -rf $HOME/.m2/repository
mvn install                     # while still online
# unplugged my network
# develop stuff
mvn install
于 2012-01-19T13:31:45.577 回答
1

您可以在相关项目的全新 .m2 存储库上运行 maven dependency:go-offline 。这应该下载 maven 需要能够离线运行的所有内容。如果然后将这些放入项目范围的本地存储库中,您应该能够实现您想要的。我还没有尝试过这个

于 2012-01-19T13:32:40.880 回答
0

指定本地存储库位置,可以在settings.xml文件中使用参数,也可以<localRepository>...</localRepository>通过mvn使用-Dmaven.repo.local=...参数运行。在初始项目构建之后,所有必要的工件都应该在本地缓存,并且您可以以相同的方式引用此存储库位置,同时在离线模式下运行其他 Maven 构建 ( mvn -o ...)。

于 2017-01-03T09:58:46.313 回答