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

时间:2010-08-16 04:02:56

标签: 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>

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:8)

首先(我将永远不会重复),不鼓励使用 system 范围内的依赖关系,除非您确切知道自己在做什么。来自Dependency Scopes

  

系统:您的某些阶段需要此依赖关系   项目的生命周期,但是   系统专用。 使用此范围   气馁:这被认为是一个   “先进”的功能和应该   只有在你真正理解的时候才能使用   其使用的所有后果,   如果没有,这可能会非常困难   实际上无法量化。   根据定义,此范围呈现您的   构建非便携式。它可能是   某些边缘情况下必要的。该   系统范围包括   指向的<systemPath>元素   这个的实际位置   对本地机器的依赖。它是   因此用于指代一些神器   预计将出现在给定的   本地机器不在存储库中;   并且其路径可能会有所不同   机器到机器。 systemPath   元素可以指环境   路径中的变量:${JAVA_HOME}   例如。

现在,要严格回答您的问题,声明与system范围相关的依赖关系指向几个罐子是“可能的” IF 依赖项有MANIFEST.MF个列表其他JAR相对于其Class-Path条目。这样的事情(假设“根”依赖在lib):

Class-Path: ../lib/bar.jar ../lib/foo.jar

但我不推荐这种方法,特别是在您的特定情况下。相反,请查看此previous answer,其中我将介绍如何设置基于文件的存储库。

答案 2 :(得分:3)

我从来没有这样做但是根据maven的核心概念,我认为这可能是不可能的,因为每个工件都由一个实体(jar,zip,tar等)表示 。因此,可能无法让多个罐子代表单个工件。

假设Morever system scope依赖项始终可用,并且未在repo中查找。这些应该仅限于jvm或jdk相关的依赖项(现在由jdk提供,但之前可以单独下载)

答案 3 :(得分:0)

我有类似的问题;我使用的专有软件没有公共的Maven存储库,但是打包了将近200个jar。我已经解决了以下问题:

cd /folder
ls *.jar > folder.txt

然后替换folder.txt的每一行

^(.+)$

使用

<dependency><groupId>folder</groupId><artifactId>$1</artifactId><version>1.0</version><scope>system</scope><systemPath>${folder.root}/folder/$1</systemPath></dependency>

将结果复制到您的pom.xml中。