tangguo

具有依赖项的Maven 2程序集:不包括作用域“系统”下的jar

java

我正在使用maven-assembly插件创建我的应用程序的jar,包括其依赖项,如下所示:

<assembly>
    <id>macosx</id>
    <formats>
       <format>tar.gz</format>
       <format>dir</format>
    </formats>
    <dependencySets>
        <dependencySet>
            <includes>
                <include>*:jar</include>
            </includes>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>
</assembly>

(我省略了与问题无关的其他内容)

到目前为止,此方法运行良好,因为它创建了一个lib包含所有依赖项的目录。但是,我最近添加了一个范围为的新依赖项system,它不会将其复制到lib输出目录。我肯定在这里缺少一些基本的东西,所以我寻求帮助。

我刚刚添加的依赖项是:

<dependency>
  <groupId>sourceforge.jchart2d</groupId>
  <artifactId>jchart2d</artifactId>
  <version>3.1.0</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/external/jchart2d-3.1.0.jar</systemPath>
</dependency>

我能够包括此依赖项的唯一方法是在Assembly元素中添加以下内容:

<files>
    <file>
        <source>external/jchart2d-3.1.0.jar</source>
        <outputDirectory>lib</outputDirectory>
    </file>
</files>

但是,这迫使我必须在重命名此jar时更改pom和汇编文件(如果有的话)。同样,这似乎是错误的。

我有试过runtime在dependencySets和sourceforge.jchart2d:jchart2d没有运气。

那么,如何system在Maven 2的汇编文件中包含作用域的jar?

非常感谢


阅读 213

收藏
2020-11-19

共1个答案

小编典典

我不惊讶没有添加系统范围的依赖关系(毕竟,必须通过定义显式提供具有系统范围的依赖关系)。实际上,如果您真的不想将该依赖项放在本地存储库中(例如,因为您想将其作为项目的一部分进行分发),这就是我要做的:

我将依赖项放在项目本地的“文件系统存储库”中。
我会这样声明该存储库pom.xml:

<repositories>
  <repository>
    <id>my</id>
    <url>file://${basedir}/my-repo</url>
  </repository>
</repositories>

我只是声明没有system范围的工件,这只是麻烦的根源:

<dependency>
  <groupId>sourceforge.jchart2d</groupId>
  <artifactId>jchart2d</artifactId>
  <version>3.1.0</version>
</dependency>

我不确定100%会满足您的需求,但我认为这是比使用系统范围更好的解决方案。

更新:我应该在原始答案中提到这一点,现在正在修复它。要在基于文件的存储库中安装第三方库,请install:install-file与localRepositoryPath参数一起使用:

mvn install:install-file -Dfile=<path-to-file> \
                         -DgroupId=<myGroup> \
                         -DartifactId=<myArtifactId> \
                         -Dversion=<myVersion> \
                         -Dpackaging=<myPackaging> \
                         -DlocalRepositoryPath=<path-to-my-repo>

您可以将其粘贴在* nix shell中。在Windows上,删除“ \”并将所有内容放在一行中。

2020-11-19