Maven:包含在公共存储库中找不到的jar

如果我要使用不在maven公共存储库中的第三方库,将其作为依赖项包含在我的项目中的最好方法是什么,以便当其他人检出我的代码时,它仍然能够构build?

我的应用程序“A”依赖于公共存储库中不存在的jar“B”。 但是,我希望将“B”作为对“A”的依赖,这样当世界另一端的人可以检查代码并且仍然能够build立“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需要项目的绝对path。 为了方便起见,如果jar文件在repository / project中,可以使用绑定到项目根目录的${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文件夹中。

当服务模块进入validation阶段时,该jar将在本地存储库中可用。 只需在父pom中设置groupid,artifact等的方式引用它即可。 例如:

 <dependency> <groupId>net.authorize</groupId> <artifactId>anet-java-sdk</artifactId> <version>1.4.6</version> </dependency> 

使用系统范围可能会工作,但是即使在Maven规范中也不推荐使用。 它不是便携式的。

来自Maven的书:

系统 – 系统范围与提供的类似,不同之处在于您必须在本地文件系统上提供JAR的显式path。 这是为了允许编译可能是系统库的一部分的本地对象。 假定工件始终可用并且不在存储库中查找。 如果将范围声明为system,则还必须提供systemPath元素。 请注意,不build议使用此范围(您应该始终尝试引用公共或自定义Maven存储库中的依赖关系)。

最好的方法是安装到您的本地存储库或您的企业存储库,以供所有同行访问。

如果您使用像Nexus这样的资源库pipe理器,这非常容易。

一般来说,你应该先把第三方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来打包或者部署你的项目

第三方jar也将包含在包中。

如果您使用的是Groovy / Grail工具套件( GGTS ),则可以使用以下步骤直接导入第三方依赖项(但请确保您的本地存储库中存在该第三方依赖项):

  1. 转到Project Explorer并右键单击项目。
  2. 点击导入选项。
  3. 扩展maven选项并select安装或部署一个工件到一个maven仓库 ,然后点击下一步。
  4. 浏览并使用“ 工件文件”选项select第三方依赖关系,然后使用POM.xml文件input组标识,工件标识和版本的详细信息,然后单击完成

等一下,可能会出现这个问题的错误。