除非您的 Java EE 服务器/容器配置了该 jar,否则您不能使用 systemPath。
请记住,maven 只是开发和编译时间。一旦构建了war文件,maven除了将所有需要的jar放入WEB-INF/lib文件夹之外没有任何作用。
当您指定系统范围时,这意味着您有责任确保在部署战争时该 jar 存在。您已经有一个框架来执行此操作,并且您不希望使用该 jar 来阻碍您的构建依赖项,但您必须仅在开发期间通过 Maven 使其可用。
另一个类似的范围是“提供的”。例如,JBoss 或您的公司公共部署 Tomcat 框架已经提供了许多 jar,例如 Spring 和 Hibernate,它们由服务器启动加载并且对服务器中的所有应用程序都是通用的。因此,您不希望 maven build 将它们包含在 war 文件中。
正确的方法,Maven 大师会告诉你。是拥有自己的 maven 服务器并在该服务器中构建您需要的任何工件。但是,有时这是不可能的。
因此,在这种情况下,我会创建与项目一起分发的项目级存储库并签入版本控制。我运行命令mvn install
来创建一个名为“project-repo”的项目级目录。
http://maven.apache.org/plugins/maven-install-plugin/examples/specific-local-repo.html(由于熟悉,大多数时候,我手动构建 repo 而不是运行 mvn install)。
然后在 POM 中,我将 file://${project.basedir}/project-repo 指定为存储库之一。需要注意的是,在 Windows 中,“file://”之后的斜杠以外的斜杠在引用 Windows 文件系统路径时必须是反斜杠。
<repositories>
<repository>
<id>my-repo1</id>
<name>my custom repo</name>
<url>http://ho.ho.ho</url>
</repository>
<repository>
<id>project-repo</id>
<name>my project repo</name>
<url>file://${project.basedir}\project-repo</url>
</repository>
</repositories>