【问题标题】:External maven jar using SystemPath and scope="system"使用 SystemPath 和 scope="system" 的外部 maven jar
【发布时间】:2021-04-12 17:58:10
【问题描述】:

我正在尝试使用 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 没有作为运行时依赖项包含在内。

医生说

provided 这很像编译,但表示您希望 JDK 或容器在运行时提供依赖项。例如,在为 Java Enterprise Edition 构建 Web 应用程序时,您可以将 Servlet API 和相关 Java EE API 的依赖设置为提供的范围,因为 Web 容器提供了这些类。具有此范围的依赖项被添加到用于编译和测试的类路径中,而不是运行时类路径中。它不是传递的。

system 这个作用域与提供的作用域类似,只是你必须提供明确包含它的 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 install:install-file 简单地安装到我的本地存储库。但我得到编译错误。它根本没有找到存储库,尽管除了编译错误之外我没有收到任何错误。我确认 jar 已正确安装在 .m2 存储库中

【问题讨论】:

  • 您的项目运行情况如何?

标签: java maven jar


【解决方案1】:

您在systemPath 中使用pom.basedir 而不是project.basedir

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

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

【讨论】:

  • pom.basedir 似乎与project.basedir 相同,至少在我的情况下。使用 project.basedir 时出现错误,所以我切换了它。正如我所说,我使用mvn install:install-file 将 jars 安装在本地 libs 目录(用于使用项目 repo)以及 .m2 中以使用本地 repo。但该项目不会建立。由于某种原因,它找不到依赖项。
  • 更新了问题以表明我尝试安装到本地 .m2 存储库。未找到依赖项(尽管我没有得到任何明确的错误)。
【解决方案2】:

已解决。这是用户错误。我认为我添加的 Jar 是一个替代品。但是编译器错误是由必须更改的导入引起的。我认为它没有正确地拿起罐子。感谢帮助的人。你至少把我引向了正确的方向。

【讨论】:

    猜你喜欢
    • 2021-11-05
    • 2011-03-17
    • 2015-10-15
    • 2010-10-19
    • 2017-01-21
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多