如果我要使用不在 maven 公共存储库中的第 3 方库,将它作为我的项目的依赖项包含在内的最佳方法是什么,以便当其他人检查我的代码时它仍然能够构建?
IE
我的应用程序“A”依赖于公共存储库中不存在的 jar “B”。但是,我希望将“B”添加为“A”的依赖项,这样当世界另一端的人可以检查代码并仍然能够构建“A”时
如果我要使用不在 maven 公共存储库中的第 3 方库,将它作为我的项目的依赖项包含在内的最佳方法是什么,以便当其他人检查我的代码时它仍然能够构建?
IE
我的应用程序“A”依赖于公共存储库中不存在的 jar “B”。但是,我希望将“B”添加为“A”的依赖项,这样当世界另一端的人可以检查代码并仍然能够构建“A”时
您可以自己安装项目。
或者您可以使用如下system
范围:
<dependency>
<groupId>org.group.project</groupId>
<artifactId>Project</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/project-1.0.0.jar</systemPath>
</dependency>
systemPath
需要项目的绝对路径。为方便起见,如果 jar 文件位于存储库/项目中,则可以使用${basedir}
属性,该属性绑定到项目的根目录。
如果您的父项目带有处于这种情况的模块(需要不在存储库中的依赖项),您可以设置您的父项目以使用 exec-maven-plugin 插件来自动安装您的依赖文件。例如,我必须使用 authorize.net jar 文件来执行此操作,因为它不是公开可用的。
父 POM:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<inherited>false</inherited>
<executions>
<execution>
<id>install-anet</id>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>mvn</executable>
<arguments>
<argument>install:install-file</argument>
<argument>-Dfile=service/lib/anet-java-sdk-1.4.6.jar</argument>
<argument>-DgroupId=net.authorize</argument>
<argument>-DartifactId=anet-java-sdk</argument>
<argument>-Dversion=1.4.6</argument>
<argument>-Dpackaging=jar</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
在上面的例子中,jar 的位置在“service”模块的 lib 文件夹中。
当服务模块进入验证阶段时,该 jar 将在本地存储库中可用。只需按照您在父 pom.xml 中设置 groupid、artifact 等的方式引用它。例如:
<dependency>
<groupId>net.authorize</groupId>
<artifactId>anet-java-sdk</artifactId>
<version>1.4.6</version>
</dependency>
使用系统范围可能有效,但即使在 Maven 规范中也不建议这样做。它不是便携式的。
来自 Maven 书:
system - 系统范围类似于提供的,只是您必须提供本地文件系统上 JAR 的显式路径。这旨在允许针对可能是系统库一部分的本机对象进行编译。假定工件始终可用并且不在存储库中查找。如果将范围声明为系统,则还必须提供 systemPath 元素。请注意,不建议使用此范围(您应该始终尝试在公共或自定义 Maven 存储库中引用依赖项)。
最好的方法是安装到您的本地存储库或您的企业存储库,以便所有同行都可以访问。
如果您使用的是 Nexus 等存储库管理器,这非常容易。
一般来说,您应该首先将 3rd 方 jar 放入本地存储库。之后,您可以通过将依赖项添加到 pom.xml 中来使用它。
例如。
1.首先将jar放入本地存储库:
mvn install:install-file -Dfile=<path-to-file>
注意:此命令需要 maven-install-plugin 2.5 或更高版本。如果没有,你可以参考这里
2.通过将依赖项添加到项目的 pom.xml 中来使用 jar。
只需将其添加到项目的 pom.xml 中:
<dependency>
<groupId>${the groupId in the jar's pom.xml}</groupId>
<artifactId>${the artifactId in the jar's pom.xml}</artifactId>
<version>${the version in the jar's pom.xml}</version>
</dependency>
3.然后您可以通过运行mvn package
或打包或部署您的项目mvn deploy
第 3 方 jar 也将包含在包中。
这个解决方案对我有用;1. 在我项目的根目录中创建了一个 local-maven-repo 并复制了我所有的 jars 2. 执行以下命令为我需要使用的每个 jar 生成必要的 pom 文件和元数据等;
mvn deploy:deploy-file -DgroupId=<somegroupid> -DartifactId=<someartifact> -Dversion=1.0.0 -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=<path to jar file>
这在 local-maven-repo 中生成了一个带有 pom 文件的新 jar 文件,我能够将其作为这样的依赖项包含到我的项目中;
<dependency>
<groupId>somegroupid</groupId>
<artifactId>someartifact</artifactId>
<version>1.0.0</version>
</dependency>
然后mvn package
确保我的项目依赖项已解决并与我的 war 文件打包在一起。
如果您使用的是 groovy/ grail工具套件 (GGTS ),那么您可以使用以下步骤直接导入该第三方依赖项(但请确保您的本地存储库中有该第三方依赖项):
稍等片刻,这个问题可能会出错。