【问题标题】:Maven: System dependency pointing to multiple jarsMaven:指向多个 jar 的系统依赖项
【发布时间】:2010-08-16 04:02:55
【问题描述】:

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

我确信这是非常不正统的,但是,我只是想知道这是否可能。所以像:

<dependency>
  <groupId>foo</groupId>
  <artifactId>foo</artifactId>
  <version>1.0</version>
  <scope>system</scope>
  <systemPath>${basedir}/lib/foo/*.jar</systemPath>
</dependency>

【问题讨论】:

    标签: java maven-2


    【解决方案1】:

    据我了解,您正在寻找一种简单的方法来管理对本地 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>
    

    【讨论】:

    • addjars-maven-plugin 需要 Maven 3.0 版。
    【解决方案2】:

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

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

    现在,为了严格回答您的问题,声明一个具有 system 范围的依赖项将指向多个 jar 是“可能的”IF 依赖项有一个 MANIFEST.MF 相对列出其他 JAR它的Class-Path 条目。像这样的东西(假设“根”依赖在lib):

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

    但我不推荐这种方法,尤其是在您的特殊情况下。相反,请查看previous answer,我在其中描述了如何设置基于文件的存储库。

    【讨论】:

    • 使用系统应该打印出关于不稳定构建的警告。
    【解决方案3】:

    我从未这样做过,但根据 maven 的核心概念,我认为这可能是不可能的,因为每个 工件都由单个实体(jar、zip、tar 等)表示 .因此,可能不可能有多个 jar 代表单个工件。

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

    【讨论】:

      【解决方案4】:

      我也有类似的问题;我使用的专有软件没有公共的 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。

      【讨论】:

        猜你喜欢
        • 2015-08-01
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        • 2017-05-20
        • 1970-01-01
        • 1970-01-01
        • 2021-09-12
        • 1970-01-01
        相关资源
        最近更新 更多