【问题标题】:Best way to create a maven artifact from existing jar从现有 jar 创建 maven 工件的最佳方法
【发布时间】:2011-01-11 17:37:40
【问题描述】:

我正在做一些项目。

这些项目都依赖于许多库,其中大部分都可以在 maven repo 中找到。 对于其他库,我想创建一个 Maven 工件,所以我可以将它用作依赖项。问题是,我只有这些库的 jar 文件。

从现有 jar 文件创建工件的最佳方法是什么?

【问题讨论】:

标签: java maven-2 jar


【解决方案1】:

如果您不使用 remote 存储库(这是个人开发的常见情况),只需 install 这些工件在您的本地 使用install:install-file mojo 的存储库:

mvn install:install-file 
  -Dfile=<path-to-file> 
  -DgroupId=<group-id> 
  -DartifactId=<artifact-id> 
  -Dversion=<version> 
  -Dpackaging=<packaging> 
  -DgeneratePom=true

Where: <path-to-file>  the path to the file to load
       <group-id>      the group that the file should be registered under
       <artifact-id>   the artifact name for the file
       <version>       the version of the file
       <packaging>     the packaging of the file e.g. jar

但显然,这会使您的构建不可移植(尽管这可能不是问题)。为了不牺牲可移植性,您必须使工件在远程存储库中可用。在企业环境中,处理该问题的常用方法是安装企业存储库(在这种情况下,确实是到deploy 工件)。

更新:将工件安装到本地存储库后,只需在 pom 中声明一个 &lt;dependency&gt; 元素,就像任何其他依赖项一样,例如:

<dependency>
  <groupId>aGroupId</groupId>
  <artifactId>aArtifactId</artifactId>
  <version>1.0.12a</version>
  <packaging>jar</packaging>
</dependency>

【讨论】:

  • 与上述相同的问题,安装文件是否解决了依赖关系?还是仅将 jar 文件上传到本地存储库?如果是第二种情况,您将如何在 pom.xml 中创建依赖项?
  • @Nils 不, install:install-file 不会解决依赖关系。这怎么可能发生?如果它们没有“mavenized”,Maven 对这些工件及其依赖关系一无所知。所以,确实,它只会上传指定的jar文件。我将更新我的答案,向您展示如何在 pom.xml 中声明依赖关系。
  • 好吧,这是我的猜测。正如 manuel 所描述的,以手动方式处理传递依赖是很痛苦的。所以我的想法(我认为这以某种方式反映了 3wh 问题)是如何处理 jar 时的依赖关系。我记得我以前的一位同事编写了一些脚本来查看 jar、它的源/类文件和 lib 文件夹,并尝试使用这些信息创建一个具有尽可能好的依赖关系的 pom。但看起来,这个东西从来没有进入 maven 插件存储库。或者有没有类似的?
【解决方案2】:

您可以使用Maven Deploy Plugin 将您的 JAR 文件(以及可选的 POM 文件,尽管默认情况下会为您创建一个)上传到您的 Maven 存储库。

【讨论】:

    【解决方案3】:

    作为danben said,您必须将这些jar 部署到存储库。但是,我似乎从您的问题中了解到,除了全局 maven 之外,您没有存储库。

    您可以使用NexusArtifactory

    【讨论】:

      【解决方案4】:

      我知道你的问题。 Mavenizing jars 有时会很痛苦(特别是如果它们有进一步的传递依赖,也需要在 pom.xml 中定义)。

      您是否检查过这些库是否真的从未作为 maven deps 存在?看看常见的嫌疑人:

      有时我喜欢使用 Nexus jar 上传对话框来创建 pom.xml 文件。

      【讨论】:

      【解决方案5】:

      您还可以在项目中的存储库中没有的 jar 上创建“系统”依赖项。例如,

          <dependency>
              <groupId>com.example</groupId>
              <artifactId>MySpecialLib</artifactId>
              <version>1.2</version>
              <scope>system</scope>
              <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/MySpecialLib-1.2.jar</systemPath>
          </dependency>
      

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 2011-01-12
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        • 2014-08-28
        • 1970-01-01
        • 2023-04-02
        相关资源
        最近更新 更多