使用systempath和scope=“system”的外部maven jar

vcirk6k6  于 2021-06-26  发布在  Java
关注(0)|答案(2)|浏览(297)

我试图使用systempath指定一个外部jar,并指定system的作用域

<dependency>
        <groupId>org.whatever</groupId>
        <artifactId>jar-name</artifactId>
        <version>2.0.0-SNAPSHOT</version>
        <scope>system</scope>
        <systemPath>${pom.basedir}/libs/foo.jar</systemPath>
    </dependency>

这允许项目进行构建,但我得到的运行时错误使我相信jar没有作为运行时依赖项包含。
文件说
假设这很像compile,但表示您希望jdk或容器在运行时提供依赖关系。例如,在为javaenterpriseedition构建web应用程序时,您可以将对servlet api和相关javaeeapi的依赖关系设置为提供的范围,因为web容器提供了这些类。具有此作用域的依赖项将添加到用于编译和测试的类路径,而不是运行时类路径。它是不可传递的。
系统这个作用域与提供的类似,只是您必须提供显式包含它的jar。工件总是可用的,不会在存储库中查找。
如何确保工件在运行时可用?它仍然在那里,在指定的相同位置(我在一个系统上完成所有这些)。使用intellij,如果有区别的话
我尝试通过指定一个项目存储库,通过

<repositories>
        <repository>
            <id>in-project</id>
            <name>In Project Repo</name>
            <url>file://${project.basedir}/libs</url>
        </repository>
    </repositories>

但在那种情况下,我甚至不能让项目建立。根本找不到依赖项。我曾经 mvn install:install-file 将jars安装到libs目录中,但仍然不起作用。
我还尝试简单地安装到我的本地回购也使用 mvn install:install-file . 但我有编译错误。它根本找不到repos,尽管除了编译错误之外我没有得到任何错误。我确认jar在.m2回购中安装正确

f8rj6qna

f8rj6qna1#

您正在使用 pom.basedir 而不是 project.basedirsystemPath .
这个 system maven中不推荐使用scope。所以你应该考虑使用 maven-install-plugin 插件并在本地安装所需的jar。安装插件将jar文件安装到本地存储库中 ~/.m2/repository 所以你可以在你的本地版本中使用它。
你应该使用 install:install-file 目标是从命令行安装文件。

sulc1iza

sulc1iza2#

这个问题解决了。这是用户错误。我以为我加的那个jar只是个临时替代品。但是编译器错误是由于导入必须更改而导致的。我以为它没把jar捡好。感谢人们的帮助。你至少把我引向了正确的方向。

相关问题