我正在开发一个依赖于第三方库的项目,打包为 JAR,其中包含一些非 Java 资源。 我无权访问其源代码,但显然该库获取其中某些资源的方式是通过指定与该库的 JAR 相关的 URI。 换句话说:代码仅在库 jar 具有特定名称时才有效。
这让我很头疼,因为我使用 Maven 来构建我的项目。通常我在我的本地存储库中安装第三方库并将它们作为依赖项导入我的 POM 中,我不关心依赖库中的 jar 名称是否被 Maven 更改(通常在名称中添加一个版本)。
解决这个问题的正确方法是什么?我的直觉是我应该以某种方式导入具有预期名称的第三方库,并以某种方式将导入库 jar 的父目录添加到类路径中(这样可以在运行时根据其名称找到 jar)。这样对吗 ?如果可以,我该怎么做?
更复杂的是,我正在开发的项目本身也是一个库,因此它也应该被其他使用 Maven 的项目导入。 例如,首先我考虑将库声明为 provided,然后将其复制到项目目录中的文件(具有所需的名称),例如:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>theGroup</groupId>
<artifactId>theArtifact</artifactId>
<version>theVersion</version>
<type>jar</type>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<destFileName>EXPECTED_NAME.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
但这行不通,因为在将我的库导入另一个项目时,复制的文件不被视为传递依赖。
更新:
我想可能有用的方法是在资源文件夹中找到第三方 jar(具有预期的名称),然后以某种方式将 jar 内容添加到类路径中,这样该类路径也将被视为具有传递依赖性。 如果此解决方案可行,最简单的方法是什么?
最佳答案
您可以将该 jar 复制到您的项目的文件夹中,并添加具有系统范围的依赖项。
假设您的 jar 名称是“particularLib.jar”。您可以在主项目下创建一个名为 external-libs 的文件夹,然后将 jar 复制到其中。您可以通过这种方式声明依赖关系:
<dependency>
<groupId>particular</groupId>
<artifactId>particularLib</artifactId>
<version>1</version>
<scope>system</scope>
<systemPath>${basedir}/external-libs/partucularLib.jar</systemPath>
</dependency>
关于java - 导入具有特定命名和类路径要求的依赖项的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553731/