我要求在开源操作系统中使用Maven,以便在 nix环境下完全脱机使用Maven。即它应该使用系统中可用的依赖项(可能在/ usr / share / +其他几个地方?)。 Maven不应该从互联网上下载任何依赖。
有没有解决方案来实现这一目标?在系统中创建M2仓库不是一个可行的解决方案。问题是文件系统是只读的。我们只能使用写访问权限来处理临时文件夹(例如/ tmp)。但是在临时位置维护回购是一个糟糕的设计,不是吗? 换句话说,要安装的新maven项目应该使用系统中的现有软件包(如果可用)。如果包不存在,则应单独安装(通过包管理器),不应复制到m2 repo。
有没有任何已知方法可以做到这一点?
感谢您的帮助!
PS:请注意,我不是要求-o选项让它脱机!
答案 0 :(得分:1)
您可以创建自己的“镜像”存储库(/ tmp上的实际Maven存储库的镜像),并要求Maven使用它而不是远程存储库。
示例:
http://maven.apache.org/guides/mini/guide-mirror-settings.html
答案 1 :(得分:0)
我认为你可以创建一个本地maven存储库(带有正确的文件夹树和pom文件),但在只写目录中使用符号链接到jar。当然,这个解决方案并不比Shamit Verma的方法更容易,你必须编写一些代码。
答案 2 :(得分:0)
我们使用的方法如下。 我们决定将m2 repo存储在/ usr / share / maven-2 / maven_home / m2_repo /。这不是临时文件夹,需要管理员权限才能编写。但这不是问题,因为安装包也需要管理员权限。
我们已经将repo中的jar符号链接到系统级jar。即我们维护了maven存储库结构,但是jar将它们符号链接到系统jar。这意味着没有不必要的重复和浪费空间。我们仍然将pom文件保存在repo中。 pom文件由python脚本重写,以满足我们的需求。 此外,我们使用system scope引用了依赖关系。例如,
<dependency>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>666</version>
<scope>system</scope>
<systemPath>/usr/share/maven-core/lib/maven-core.jar</systemPath>
</dependency>
对于系统范围,groupId:artifactId:版本组合无关紧要。它只是挑选它在<systemPath>