我们有一个git项目有一些第三方罐子,这些罐子在任何Maven回购中都没有,并且在" lib"项目中的文件夹。我需要包含它们来编译,构建然后将它们打包到WEB-INF/lib
中的WAR中。
我无法将它们作为本地maven repo从命令行添加,因为这些项目需要可以为任何克隆repo的人构建,而不需要他们运行额外的命令(我无法解决这个问题)。
我看到一些人建议系统范围,但Maven不会将它们打包到你的WAR中:
<dependency>
<groupId>com.roufid.tutorials</groupId>
<artifactId>example-app</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/yourJar.jar</systemPath>
</dependency>
如何将这些罐子用于编译/检查,构建然后打包到WAR中?
答案 0 :(得分:1)
您可以使用:
assembly
插件对于Maven repo on-the-fly选项,您可以按照here所述进行操作(即,已经存在已包含所需罐子的任何已存在的Maven仓库,例如您当地的罐子,将其放入您的项目,然后使用相对路径从您的项目中引用此repo。)
答案 1 :(得分:0)
我假设您已经验证了您可能用于分发这些罐子的任何机制都符合相关许可证。如果它会,那么似乎没有理由让罐子&#39;创建者不提供官方Maven分发,因此您最好的选择可能是游说他们这样做。但如果没有,但由于某种原因,他们会允许您分发罐子(通过克隆您的仓库,或通过您维护的单独的Maven仓库):
有几种方法。我优先考虑不将罐子放入git仓库的方法。
发布Maven回购
因此,可以主持一个面向公众的回购并以这种方式提供工件。 pom可以将面向公众的repo添加到构建中,这样克隆的人就可以构建而无需运行任何特殊命令。
运行自己的回购并不是非常困难。 Nexus或Artifactory jFrog的OSS版本可能非常强大。
但是,如果我们假设作者&#39;拒绝通过Maven发布自己的罐子意味着他们不希望以这种方式分发它们,那么就没有理由花太多时间在这个选项的细节上。继续......
Git Repo中的分布
我想这就是你正在做的事情,尽管如果Maven发行版违反了许可证,我还要确保你以正确的方式分解头发并认为这不是。
所以问题是如何让Maven处理以这种方式分发的工件,并且还有一些选项。
您反对将罐装在本地仓库中是因为它需要用户的额外命令;但实际上这可以在&#34;验证&#34;构建阶段。将install:install-file
绑定到验证阶段应该有效。
或者,您对使用system
范围的反对意见是该文件未被复制到最终战争中。您可以使用依赖插件强制解决问题,但我不确定。我确信您可以将包含jar的目录视为具有war插件中适当配置的Web资源。 (您希望将其视为未过滤并映射到WEB-INF/lib
文件夹。)
在任何情况下,如果您在git仓库中分发jar(或其他大型二进制文件),我强烈建议您查看git lfs
。这将需要您的每个用户进行一次性配置,但这会阻止您的repo逐渐变得臃肿和无法使用。
答案 2 :(得分:-1)
在systemPath中使用正斜杠(/)到反斜杠()。
<dependency>
<groupId>com.roufid.tutorials</groupId>`enter code here`
<artifactId>example-app</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}\lib\yourJar.jar</systemPath>