【发布时间】: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 存储库中
【问题讨论】:
-
您的项目运行情况如何?