外部 maven jar 使用 SystemPath 和 scope= "system"



我正在尝试使用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。工件总是可用的,并且不会在存储库中查找。

如何确保工件在运行时可用?它仍然在那里,在指定的相同位置(我在一个系统上完成所有这些(

我尝试通过指定一个项目存储库来实现这一点

<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目录中,但它仍然不起作用。

我还试着简单地安装到我的本地repo,同样使用mvn install:install-file。但是我会遇到编译错误。它根本没有找到repos,尽管除了编译错误之外,我没有得到任何错误。我确认罐子已正确安装在.m2回购中

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

在Maven中不赞成使用system作用域。因此,您应该考虑使用maven-install-plugin插件,并在本地安装所需的jar。安装插件会将jar文件安装到您的本地存储库~/.m2/repository中,这样您就可以在本地构建中使用它。

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

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

最新更新