Java 导入具有特定命名和类路径要求的依赖项的正确方法?

Java 导入具有特定命名和类路径要求的依赖项的正确方法?,java,maven,Java,Maven,我正在开发一个依赖于第三方库的项目,该库打包为JAR,其中包含一些非java资源。 我无法访问它的源代码,但显然,库获取其中某些资源的方式是通过指定与该库的JAR相关的URI。 换句话说:只有当库jar具有特定名称时,代码才能工作 这让我很头疼,因为我使用Maven来构建我的项目。通常,我在本地存储库中安装第三方库,并将它们作为依赖项导入POM中,我不关心依赖项库中的jar名称是否由Maven更改(通常在名称中添加版本) 解决这个问题的正确方法是什么?我有一种直觉,我应该以某种方式导入具有预期名

我正在开发一个依赖于第三方库的项目,该库打包为JAR,其中包含一些非java资源。 我无法访问它的源代码,但显然,库获取其中某些资源的方式是通过指定与该库的JAR相关的URI。 换句话说:只有当库jar具有特定名称时,代码才能工作

这让我很头疼,因为我使用Maven来构建我的项目。通常,我在本地存储库中安装第三方库,并将它们作为依赖项导入POM中,我不关心依赖项库中的jar名称是否由Maven更改(通常在名称中添加版本)

解决这个问题的正确方法是什么?我有一种直觉,我应该以某种方式导入具有预期名称的第三方库,并以某种方式将导入库jar的父目录添加到类路径中(这样就可以在运行时找到给定名称的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

我认为没有一种简单可靠的方法可以做到这一点。有机会使用其他图书馆吗?