Maven:指向多个jar的系统依赖项

dig*_*nie 12 java maven-2

是否可以在pom中定义依赖关系,使其具有系统范围但指向多个jar?

我确信这是非常不正统的,但我只是想知道这是否可能.所以类似于:

<dependency>
  <groupId>foo</groupId>
  <artifactId>foo</artifactId>
  <version>1.0</version>
  <scope>system</scope>
  <systemPath>${basedir}/lib/foo/*.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)

小智 13

据我所知,您正在寻找一种简单的方法来管理本地jar文件的依赖项(在您的案例中位于'$ {basedir}/lib/foo /'文件夹中).使用addjars-maven-plugin很简单.只需将以下声明添加到您的pom:

<plugin>
  <groupId>com.googlecode.addjars-maven-plugin</groupId>
  <artifactId>addjars-maven-plugin</artifactId>
  <version>1.0.2</version>
  <executions>
    <execution>
        <goals>
            <goal>add-jars</goal>
        </goals>
        <configuration>
            <resources>
                <resource>
                    <directory>${basedir}/lib/foo</directory>
                </resource>
            </resources>
        </configuration>
    </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

  • addjars-maven-plugin需要Maven 3.0版. (2认同)

Pas*_*ent 8

首先(我将永远不会重复它),system除非你确切知道你在做什么,否则不鼓励使用范围的依赖.从依赖范围:

system:在项目生命周期的某个阶段需要此依赖项,但这是系统特定的.不鼓励使用此范围:这被认为是一种"高级"功能,只有在您真正理解其使用的所有后果时才能使用,如果实际上无法量化则可能非常困难.根据定义,此范围使您的构建不可移植.在某些边缘情况下可能是必要的.系统范围包括<systemPath>指向此依赖关系在本地计算机上的物理位置的 元素.因此,它用于指代预期存在于给定本地机器上而不是存储库中的某个工件; 并且其路径可能因机器而异.该systemPath element可以在其​​路径中引用环境变量:${JAVA_HOME} 例如.

现在,为了严格回答你的问题,如果依赖关系在其条目中相对列出了其他JAR ,那么声明一个system指向几个jar 的范围的依赖是"可能的" .像这样的东西(假设"根"依赖在于):MANIFEST.MFClass-Pathlib

Class-Path: ../lib/bar.jar ../lib/foo.jar
Run Code Online (Sandbox Code Playgroud)

但我不推荐这种方法,特别是在你的特定情况下.相反,请看一下之前的答案,其中我将介绍如何设置基于文件的存储库.