如何将本地jar文件添加到Maven项目?

如何在项目的库源代码中直接添加本地jar文件(还没有成为Maven存储库的一部分)? html


#1楼

您能够像这样直接添加本地依赖项(如在包含专有库的build maven项目中提到的那样): apache

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>

更新资料 maven

在新版本中,此功能被标记为已弃用,但仍在工做而且还没有删除(您仅在maven启动期间在日志中看到警告)。 在Maven小组中,有关此https://issues.apache.org/jira/browse/MNG-6523的问题 (您能够参与并描述此功能在某些状况下有帮助的缘由)。 我但愿此功能仍然存在! ide

若是您要的是我,只要不删除该功能,就能够使用它来仅依赖项目中一个调皮的jar文件 ,该文件不适合存储库。 若是此功能被删除,那么,这里有不少好的答案,我之后能够选择! ui


#2楼

首先,我想把这个答案归功于一个匿名的Stack Overflow用户-我很肯定我之前在这里看到过相似的答案-但如今找不到了。 url

将本地JAR文件做为依赖项的最佳选择是建立本地Maven存储库。 这样的存储库只不过是带有pom文件的适当目录结构。 spa

例如,个人主项目位于${master_project}位置,subproject1位于${master_project}/${subproject1}日志

而后,我在${master_project}/local-maven-repo建立一个Maven存储库。 code

在位于${master_project}/${subproject1}/pom.xml subproject1中的pom文件中,须要指定存储库,该存储库将文件路径做为URL参数: xml

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.parent.basedir}/local-maven-repo</url>
    </repository>
</repositories>

能够像其余任何存储库同样指定依赖项。 这使您的pom存储库独立。 例如,一旦所需的JAR在Maven Central中可用,您只须要将其从本地存储库中删除,它将从默认存储库中提取。

<dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.servicebinder</artifactId>
        <version>0.9.0-SNAPSHOT</version>
    </dependency>

最后但并不是最不重要的事情是使用-DlocalRepositoryPath开关将JAR文件添加到本地存储库,以下所示:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
    -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
    -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
    -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
    -DlocalRepositoryPath=${master_project}/local-maven-repo

安装JAR文件后,便可将您的Maven存储库提交到代码存储库,而且整个设置与系统无关。 ( GitHub中的工做示例 )。

我赞成让JAR致力于源代码仓库不是一个好习惯,可是在现实生活中,快速而又肮脏的解决方案有时比功能强大的Nexus Repo托管一个没法发布的JAR更好。


#3楼

也看看...

<scope>compile</scope>

Maven依赖 。 这是默认设置,但在某些状况下,我发现还明确设置了该范围,也使Maven能够在本地存储库中查找本地库。


#4楼

请注意,使用本地存储库不必定是个好主意。 若是该项目与其余人共享,那么当它没法正常工做时,其余全部人都会有问题和疑问,即便您的源代码控制系统中也没法使用该jar!

尽管共享存储库是最好的答案,可是若是因为某种缘由您不能执行此操做,则嵌入jar会比本地存储库更好。 仅本地回购内容可能会致使不少问题,尤为是随着时间的推移。


#5楼

<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>
相关文章
相关标签/搜索