如何将本地jar文件(还不是Maven存储库的一部分)直接添加到项目的库源中?


当前回答

首先,我想把这个答案归功于一位匿名StackOverflow用户——我很肯定我以前在这里也看到过类似的答案——但现在我找不到了。

将本地JAR文件作为依赖项的最佳选择是创建本地Maven存储库。这样的存储库只不过是一个适当的目录结构,其中包含pom文件。

例如:我的主项目位于${master_project}位置,子项目1位于${master _project}/${subject1}位置。

然后,我在以下位置创建Maven存储库:${master_project}/本地maven repo。

在子项目1中位于${master_project}/${subject1}/pom.xml的pom文件中,需要指定存储库,该存储库将文件路径作为URL参数:

<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 repo提交到代码存储库,并且整个设置与系统无关。(GitHub中的工作示例)。

我同意将JAR提交给源代码回购并不是一个好的做法,但在现实生活中,快速而肮脏的解决方案有时比一个完整的Nexus回购托管一个无法发布的JAR要好。

其他回答

我的pom.xml中的一组依赖项也出现了同样的错误。结果发现,这些依赖项的版本没有在pom.xml内指定,而是在父存储库中提到的。由于某种原因,版本详细信息未与此回购同步。因此,我使用标签手动输入版本,它就像一个符咒。查找父级中的版本并在此处指定所需的时间很少。但是,这可以仅针对显示人为错误的罐子进行,而且效果良好。希望这对某人有所帮助。

请注意,使用本地回购并不一定是个好主意。如果这个项目与其他人共享,那么当它不起作用时,其他人都会遇到问题和疑问,甚至在您的源代码管理系统中也无法使用jar!

尽管共享回购是最好的解决方案,但如果由于某种原因无法做到这一点,那么嵌入jar比本地回购要好。仅限本地的回购内容可能会导致很多问题,特别是随着时间的推移。

还可以看看。。。

<scope>compile</scope>

Maven依赖项。这是默认设置,但我发现在某些情况下,也会显式设置Maven的作用域,以便在本地存储库中查找本地库。

<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>

要安装第三方jar,请调用如下命令

mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path