当前位置: 首页 > 知识库问答 >
问题:

Maven外部依赖

宇文念
2023-03-14

我需要在我的maven项目中添加大约15个罐子,它在远程和中央存储库中都不可用。

然而,我实现了以下目标:,

>

  • 在我的项目路径中添加了jars(\src\lib)
  • 将pom更改如下,

    <dependency>
    <groupId>XXX</groupId>
    <artifactId>YYY</artifactId>
    <scope>system</scope>
    <version>8.1</version>
    <systemPath>${basedir}\src\lib\YYY.jar</systemPath>
    </dependency>
    

    我的问题是:

    我是否需要像上面那样分别对所有15个JAR重复它,或者我们有任何其他方法来绑定这些JAR并将其作为一个依赖路径?

    Maven在这里讨论了同样的事情:指向多个JAR的系统依赖性。但我想知道我是否能得到更好的/新的想法,因为这已经是5年前的讨论了

    Maven版本:3.3.9

  • 共有3个答案

    拓拔烨赫
    2023-03-14

    要将它们作为系统范围处理,您需要将每个jar作为单独的依赖项添加

    如果您预先处理并组合这些罐子(作为单个罐子),并给它们另一个Maven GAV坐标(如XXX: MY-SUPER-JAR: 1.0),您可以指定为单个罐子。注意:我不建议这样做,因为这是一个糟糕的做法。

    正如Prim的回答所示,应该避免系统范围。只需设置一个本地存储库。

    方璞
    2023-03-14

    我建议使用一个Maven存储库管理器,比如Nexus(无论如何出于几个原因推荐),并在那里托管您的第三方LIB,而不是一些VCS。

    一旦你上传了JAR,你就可以将它们作为正常的依赖项引用。

    颜镜
    2023-03-14

    我认为你不应该使用systemPath

    相反,考虑将JAR安装到您的本地存储库中,如这里所解释的:https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

    Maven允许您通过手动调用以下命令在存储库中添加库:

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

    这样,你的罐子就会安装在你的电脑里。m2存储库,并将作为模块中的其他依赖项提供

    编辑:我们可以补充一点,在与teamates合作时,我们通常使用自己的存储库管理器,比如Nexus(http://www.sonatype.org/nexus/)或人工制品(https://www.jfrog.com/open-source/)

     类似资料:
    • 在LoginStorageProviderFactory中,它有一个来自LoginStorageProvier的导入,在最后一个类中,它有一个来自外部项目(也是我的项目)中的用户类的导入。 如果我把这个用户类移到jar模块中,错误就会消失,并且一切都能很好地工作;但我的目标是将项目与用户在其他项目中的实现和EAR项目分离。 所以,我认为错误的原因是缺少依赖项,Maven不能解决它,也没有报告错误,

    • 我们在自己的Maven项目中使用jaxb2-maven-plugin生成一组通用的XSD(数据类型、词汇表等)。在第二个项目中,我需要在编译时引用其中一个或多个XSD,但不希望它们包含在生成的工件中。我创建了一个曲库文件,除了我在其中获取所有内容外,它运行良好。 我仔细研究了插件文档,但它们在细节上少得可怜。有没有办法在不需要每个项目都复制它们的情况下重用常见模式? 谢谢

    • 我在我的项目中使用了maven shade插件将所有依赖项jar类重新定位到一个包下,例如org.shade.* 当我试图在其他应用程序中使用带阴影的jar作为maven依赖项时,它会拉出依赖项jar的。 我的期望是,当Uber/shaded jar包含为maven依赖项时,它不应该拉出任何其他依赖类jar,因为这些类已经在shaded jar中重新打包了。

    • 如您所知,Maven使用存储库的概念进行依赖关系管理。 但是,如果在任何远程存储库和中央存储库中都没有依赖项,会发生什么? Maven使用External Dependency概念为这种情况提供答案。 例如,让我们对“创建Java项目”一章中创建的项目进行以下更改。 将lib文件夹添加到src文件夹。 将任何jar复制到lib文件夹中。 我们使用了ldapjdk.jar ,它是LDAP操作的帮助库

    • 我熟悉使用make构建大型应用程序,但现在我已经开始使用Android Studio,我想了解如何在Makefile中完成我已经做过的事情。 下面是一个可能有助于您确定答案的示例: Makefile示例:(极简主义) 更简单的例子: 在Gradle怎么做? 我想解决上面示例中提到的外部依赖关系。实际上,我是通过“make”来实现的,但我想完全删除这个额外的步骤。

    • 我有一个外部jar(意思是在公共回购中不可用),我想将其包含在我的构建中。我使用了本网站上的说明:http://charlie.cu.cc/2012/06/how-add-external-libraries-maven/当我在我的电脑上安装mvn时,它就可以工作了。但是当我使用Jenkins构建maven项目时,我得到了以下错误: 正在执行Maven:-B-f D:\Program Files(