我想使用 Jmathplot.jar
我试着把它作为一个依赖
<dependency>
<groupId>jmathplot</groupId>
<artifactId>jmathplot</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/jmathplot.jar</systemPath>
</dependency>
但是在安装的时候出现了这个错误:
Some problems were encountered while building the effective model for com.NResearch:dable-start-tRisk:jar:0.1-SNAPSHOT
[WARNING] 'dependencies.dependency.systemPath' for jmathplot:jmathplot:jar should not point at files within the project directory, ${project.basedir}/lib/jmathplot.jar will be unresolvable by dependent projects @ line 44, column 19
请问我该如何解决这个问题?
编辑1:
我无法更改 Maven 以将所有依赖的 jar 包含到一个 jar 中。因为这是上传到网络项目。
最佳答案
“Dependent”是使用你的项目,“dependency”是被你的项目使用。
这里真正的错误是 jmathplot.jar
所在的文件夹实际上只能由您的项目可靠地找到。即使您的家属知道如何在本地存储库中找到您的 Artifact ,他们也不知道您的 Artifact 的来源在哪里,因此将无法找到 lib/jmathplot.jar
。您可以通过将 systemPath
更改为绝对路径来解决此问题。它仍然可以参数化,但是请使用 properties
而不是隐式属性(例如 ${project.basedir}
。
最好通过将 jmathplot
安装到公司存储库中来摆脱 systemPath
依赖关系,这样它就可以像“普通” Artifact 一样使用。但是,如果您必须将 Artifact 分发到公司存储库无法访问的地方,那么这可能不是一个有用的选择。如果 jmathplot
得到 deployed to the Maven central repository 就更好了.
作为最后的手段,您可以选择捆绑依赖项(而不是依赖项)。你可以这样做:
- 使用Maven Shade Plugin .它让你选择 which packages to include这可能仅对捆绑
jmathplot
(而不是其他依赖项)有用。 - 使用Maven Assembly Plugin .它有一个 predefined descriptor对于适合您的用例的“具有依赖关系的 JAR”。您可以根据该示例创建自己的描述符,并将
dependencySets.dependencySet.scope=system
设置为仅包含给您带来麻烦的system
依赖项。
关于java - 我怎样才能告诉 Maven 捆绑依赖的 jar ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19640914/