从现有jar创建maven工件的最佳方法

时间:2010-02-01 13:51:08

标签: java maven-2 jar

我正在对一些项目进行整理。

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

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

5 个答案:

答案 0 :(得分:28)

如果您没有使用远程存储库(这是个人开发的常见情况),只需 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中声明一个<dependency>元素,就像任何其他依赖项一样,例如:

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

您可以使用NexusArtifactory

答案 3 :(得分:1)

您还可以在不在项目中的存储库中的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>

答案 4 :(得分:0)

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

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

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