我正在使用 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>

我能够包含此依赖项的唯一方法是将以下内容添加到程序集元素:
<files>
    <file>
        <source>external/jchart2d-3.1.0.jar</source>
        <outputDirectory>lib</outputDirectory>
    </file>
</files>

但是,这迫使我在重命名此 jar 时更改 pom 和程序集文件(如果有的话)。而且,这似乎是错误的。

我在 <scope>runtime</scope>dependencySets 中尝试了 <include>sourceforge.jchart2d:jchart2d</include> 没有运气。

那么如何在 maven 2 的程序集文件中包含一个 system 范围的 jar 文件呢?

非常感谢

最佳答案

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

  • 我会将依赖项放在项目本地的“文件系统存储库”中。
  • 我会像这样在我的 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 上,删除“\”并将所有内容放在一行中。

    关于maven-2 - 具有依赖项 : jar under scope "system" not included 的 Maven 2 程序集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2065928/

    10-14 11:15