代码之家  ›  专栏  ›  技术社区  ›  Peter Kronenberg

使用Systempath的外部maven jar

  •  0
  • Peter Kronenberg  · 技术社区  · 4 年前

    我试图使用systemPath指定一个外部jar,并指定系统的作用域

      <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没有作为运行时依赖项包含在内。

    医生说

    假如 这很像编译,但表示您希望JDK或容器在运行时提供依赖关系。例如,当为Java Enterprise Edition构建web应用程序时,您需要将对Servlet API和相关Java EE API的依赖设置为所提供的范围,因为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 将jar安装到libs目录中,但仍然无法工作。

    我还尝试简单地安装到本地仓库,也使用 mvn安装:安装文件 。但我遇到了编译错误。它根本找不到存储库,尽管除了编译错误外,我没有收到任何错误。我确认罐子在.m2仓库中安装正确

    0 回复  |  直到 4 年前
        1
  •  2
  •   Gebezs    4 年前

    您正在使用 pom.basedir 而不是 project.basedir 在里面 systemPath .

    这个 system 范围是 deprecated 在Maven中。 因此,您应该考虑使用 maven-install-plugin 插件并在本地安装所需的jar。安装插件将把jar文件安装到您的本地存储库中 ~/.m2/repository 因此,您可以在本地构建中使用它。

    你应该使用 install:install-file 目标是从命令行安装文件。

        2
  •  0
  •   Peter Kronenberg    4 年前

    这个问题解决了。这是用户错误。我以为我添加的罐子是一个可直接替换的东西。但是编译器错误是由于导入必须更改造成的。我以为它没有正确地捡起罐子。感谢人们的帮助。你至少把我引向了正确的方向。