我正在对一些项目进行整理。
这些项目都依赖于许多库,其中大多数都可以在maven仓库中使用。 对于其他库,我想创建一个maven工件,所以我可以将它用作依赖项。问题是,我只有这些库的jar文件。
从现有jar文件创建工件的最佳方法是什么?
答案 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之外你没有存储库。
您可以使用Nexus或Artifactory。
答案 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文件。