8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

Ishan Dubey 1月前

149 0

如何直接在项目的库源中添加本地 jar 文件(尚未成为 Maven 存储库的一部分)?

如何直接在项目的库源中添加本地 jar 文件(尚未成为 Maven 存储库的一部分)?

帖子版权声明 1、本帖标题:如何将本地 jar 文件添加到 Maven 项目?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Ishan Dubey在本站《maven》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 你好@Praneel PIDIKITI,你能将接受的答案改为获得最多票数的答案吗?

  • 我认为添加本地 jar 至少是一种“坏味道”。要么您必须将它们推送到 SCM 中,要么其他人(或构建系统)可能没有本地的 jar。这意味着构建可能会失败(以及类似的麻烦)。花点时间,将它们推送到您的团队使用的工件存储库(例如,作为“遗留”库),并从项目中的该存储库引用它们。

  • 将 JAR 安装到您的本地 Maven 存储库(通常 .m2 在您的主文件夹中),如下所示:

    mvn install:install-file \
       -Dfile=<path-to-file> \
       -DgroupId=<group-id> \
       -DartifactId=<artifact-id> \
       -Dversion=<version> \
       -Dpackaging=<packaging> \
       -DgeneratePom=true
    

    其中每个指的是:

    <path-to-file> :要加载的文件路径,例如 → c:\kaptcha-2.3.jar

    <group-id> :文件应注册的组,例如 → com.google.code

    <artifact-id> :文件的工件名称,例如 → kaptcha

    <version> :文件版本,例如 → 2.3

    <packaging> :文件打包,例如 → jar

    参考

  • 我的构建版本上的安装说明包含除 generatePom 部分之外的所有内容。这部分似乎至关重要。

  • 答案没有提到 README,也没有提到 jar 是随身携带的。但是,如果项目随身携带了 jar,那么您不妨将 repo 放入项目中,如此处所述 .com/a/36602256/1000011,那么您不需要 README,因为项目将像 jar 在 maven central 中一样工作,无需任何额外的手动步骤。

  • @opticyclic 您的评论需要更多点赞,或者需要编辑此答案。对于新手来说,这是一个灾难的根源,因为他们没有意识到安装到本地 Maven 存储库并不适用于其他所有人。

  • (maven.apache.org/guides/mini/guide-3rd-party-jars-local.html)如果有可用的pom.xml文件,命令更简单:mvn install:install-file -Dfile =-Dpom文件=

  • 您可以直接添加本地依赖项(如在 包含专有库的构建 maven 项目 ),如下所示:

    <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 组中提出了一个关于此问题的问题 https://issues.apache.org/jira/browse/MNG-6523 (您可以参与并描述为什么此功能在某些情况下很有用)。我希望此功能保留在那里!

    如果您问我,只要该功能没有被删除,我就会使用它来 make dependency to only one naughty jar file 于我项目中一个不适合存储库的顽皮 jar 文件。如果删除了此功能,那么这里有很多不错的答案,我以后可以从中选择!

  • HEN 1月前 0 只看Ta
    引用 10

    例如,有时你想专门测试一个旧罐子,我认为这个答案很适合这种情况。这是我需要的答案。赞成

  • 尽管它看上去很简单,但是这个解决方案存在一个问题,那就是 yourJar.jar 将不会包含在你应用程序的 WAR 文件中。

  • 上述解决方案不再起作用,它返回:\'xx.jar 的“dependencies.dependency.systemPath”不应指向项目目录中的文件\'这已在.com/questions/10935135/… 中处理。

  • 根据 Maven 文档(maven.apache.org/guides/introduction/...):重要提示:这已被标记为已弃用。

  • 首先,我想将此答案归功于一位匿名 Stack Overflow 用户 - 我很确定我之前在这里看到过类似的答案 - 但现在我找不到它。

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

    举个例子:我的主项目在 ${master_project} location 上,子项目 1 在 ${master_project}/${subproject1} .

    然后我在以下位置创建一个 Maven 存储库: ${master_project}/local-maven-repo .

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

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

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

        <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 仓库来托管一个无法发布的 JAR 更好。

  • 如果您想在 pom.xml 中执行此操作,请查看 baeldung.com/install-local-jar-with-maven

  • 由于 ${project.parent.basedir} 现在似乎无法解析任何东西,所以我使用了 ${project.basedir}/.. 并且运行良好。

  • 提示:请检查 $HOME/.m2/settings.xml 以避免 \'local-maven-repo\' 被 settings/mirrors/mirror 镜像*.

  • 创建一个新文件夹,比如说, local-maven-repo 位于 Maven 项目的根目录。

    你的 <project> 里面添加一个本地仓库 pom.xml

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

    然后对于您想要安装的每个外部 jar,转到项目的根目录并执行:

    mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
    
  • @user2748659 是的,如果在您的 CI 构建服务器中,文件夹 local-maven-repo 包含在您的源文件夹中(在此示例中为子文件夹)

  • 这个答案对我有用。对于共享项目,将 repo 放在项目目录中并添加到版本控制中可确保任何签出项目的人都不会缺少依赖项。如果您有很多依赖项,那么共享的远程 repo 可能是更好的解决方案,否则将 repo 保留在项目目录中完全没问题。

返回
作者最近主题: