使用Maven离线构建项目而不使用M2 repo但使用系统jar

时间:2011-03-28 01:54:01

标签: linux maven-2 maven package-managers

我要求在开源操作系统中使用Maven,以便在 nix环境下完全脱机使用Maven。即它应该使用系统中可用的依赖项(可能在/ usr / share / +其他几个地方?)。 Maven不应该从互联网上下载任何依赖。

有没有解决方案来实现这一目标?在系统中创建M2仓库不是一个可行的解决方案。问题是文件系统是只读的。我们只能使用写访问权限来处理临时文件夹(例如/ tmp)。但是在临时位置维护回购是一个糟糕的设计,不是吗? 换句话说,要安装的新maven项目应该使用系统中的现有软件包(如果可用)。如果包不存在,则应单独安装(通过包管理器),不应复制到m2 repo。

有没有任何已知方法可以做到这一点?

感谢您的帮助!

PS:请注意,我不是要求-o选项让它脱机!

3 个答案:

答案 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>

找到的罐子