Java 导入具有特定命名和类路径要求的依赖项的正确方法?
我正在开发一个依赖于第三方库的项目,该库打包为JAR,其中包含一些非java资源。 我无法访问它的源代码,但显然,库获取其中某些资源的方式是通过指定与该库的JAR相关的URI。 换句话说:只有当库jar具有特定名称时,代码才能工作 这让我很头疼,因为我使用Maven来构建我的项目。通常,我在本地存储库中安装第三方库,并将它们作为依赖项导入POM中,我不关心依赖项库中的jar名称是否由Maven更改(通常在名称中添加版本) 解决这个问题的正确方法是什么?我有一种直觉,我应该以某种方式导入具有预期名称的第三方库,并以某种方式将导入库jar的父目录添加到类路径中(这样就可以在运行时找到给定名称的jar)。这是正确的吗?如果是这样,我怎么能做到 更复杂的是,我正在开发的项目本身也是一个库,所以它也应该由使用Maven的其他项目导入。 例如,首先我考虑将库声明为提供的,然后将其复制到项目目录中的一个文件(具有所需名称),如下所示:Java 导入具有特定命名和类路径要求的依赖项的正确方法?,java,maven,Java,Maven,我正在开发一个依赖于第三方库的项目,该库打包为JAR,其中包含一些非java资源。 我无法访问它的源代码,但显然,库获取其中某些资源的方式是通过指定与该库的JAR相关的URI。 换句话说:只有当库jar具有特定名称时,代码才能工作 这让我很头疼,因为我使用Maven来构建我的项目。通常,我在本地存储库中安装第三方库,并将它们作为依赖项导入POM中,我不关心依赖项库中的jar名称是否由Maven更改(通常在名称中添加版本) 解决这个问题的正确方法是什么?我有一种直觉,我应该以某种方式导入具有预期名
<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>
org.apache.maven.plugins
maven依赖插件
2.7
复制
小组
艺术品
版本
罐子
${project.build.directory}/lib
应为_NAME.jar
但这不起作用,因为在将我的库导入另一个项目时,复制的文件不被视为可传递的依赖项
更新:
我想可能的办法是在resources文件夹中定位第三方jar(使用预期的名称),然后以某种方式将jar内容添加到类路径中,这样该类路径也将被视为具有可传递依赖关系。
如果此解决方案可行,最简单的方法是什么?您可以将该jar复制到项目的文件夹中,并添加与系统范围相关的内容 假设您的jar的名称是“speciallib.jar”。您可以在主项目下创建一个名为externallibs的文件夹,并将jar复制到其中。您可以通过以下方式声明依赖项:
<dependency>
<groupId>particular</groupId>
<artifactId>particularLib</artifactId>
<version>1</version>
<scope>system</scope>
<systemPath>${basedir}/external-libs/partucularLib.jar</systemPath>
</dependency>
特指的
特殊的
1.
系统
${basedir}/external libs/partucularLib.jar
我认为没有一种简单可靠的方法可以做到这一点。有机会使用其他图书馆吗?