将由Maven创建的JAR文件安装到本地仓库

4
我运行了以下命令来将自定义jar包安装到我的本地存储库中:
mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile=<path-to-file>

但是当我尝试这样做时:
mvn install:install-file -Dfile=E:\jarFiles\utill-1.0.jar -DlocalRepositoryPath=E:\repo
出现以下错误:
The artifact information is incomplete or not valid:
[ERROR] [0]  'groupId' is missing.
[ERROR] [1]  'artifactId' is missin
[ERROR] [2]  'packaging' is missing
[ERROR] [3]  'version' is missing.

首先,链接的标题谈到了“..自定义POM”。此外,如果您想将该构件安装到本地仓库中,只需使用“mvn install”即可。 - khmarbaise
1
你需要在指定Maven本地存储库位置作为CLI参数中找到答案。如果这是一个永久性的更改,那么你可以在你的~/.m2/settings.xml文件中指定它。 - Steve C
1
不好意思,我之前提供的链接中想表达的是这一行代码:如果JAR包是由Apache Maven构建的,它将在META-INF目录的子文件夹中包含一个pom.xml文件,并且默认情况下会被读取。在这种情况下,你只需要执行以下操作:mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile=<path-to-file> - Mr.Q
5个回答

13

你还需要提供(groupId、artifactId、packaging、version)这些信息。

mvn install:install-file  -Dfile=path-to-your-artifact-jar \
                          -DgroupId=your.groupId \
                          -DartifactId=your-artifactId \
                          -Dversion=version \
                          -Dpackaging=jar \
                          -DgeneratePom=true

点击这里查看更多细节。


1
是的,这是正确的,但如果您检查我在问题中发送的链接,它说如果您使用Maven生成了您的jar文件,则不需要提供此信息。 - Mr.Q
@user3593084:检查jar包在META-INF目录下是否包含pom文件。 - Abimaran Kugathasan
1
是的,在地址..\META-INF\maven\dependMav\utill中有一个POM文件。 - Mr.Q

8

这应该可以工作。

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=<path-to-file>

1
为什么那个会起作用?问问题者的代码为什么不起作用?请在您的回答中解释! - user7627726
一个简单的 install:install-file 对我使用了 maven-install-plugin:2.4。然而,使用在 jar 包中找到的 pom 的功能显然是在 maven-install-plugin:2.5 中介绍的,因此这确实解决了问题。 - jazzpi

2

大家好,我想提一下一个问题。当我提取了Maven创建的JAR文件并将POM.xml文件复制到另一个位置,并通过引用它来安装JAR文件时,它能够正常工作,但是我不知道为什么我的第一条命令没有起作用!这是有效的命令:

  mvn install:install-file -Dfile=E:\jarFiles\utill-1.0.jar -DpomFile=E:\jarFiles\pom.xml -DloaclRepositoryPath=E:\repo 

顺便提一句,显然 mvn install 也很好用,并且可以将 jar 文件安装到我的本地仓库。


顺便说一下,POM文件的名称并不重要,因为我将该命令重新运行并将POM文件重命名为Notpom.xml,它正常工作了。 - Mr.Q

1
我认为错误已经说得很清楚了。你甚至不需要费力思考就能从中获取信息。这是一个相关的错误并且直截了当。
参考: http://www.mkyong.com/maven/how-to-include-library-manully-into-maven-local-repository/ 使用你的mvn install命令,你需要提供groupID、artifactId、packaging和version。检查你构建jar文件的pom文件以获取这些信息。
示例命令: mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar

http://maven.apache.org/plugins/maven-install-plugin/examples/custom-pom-installation.html - Mr.Q
显然,这个jar文件存在一些问题。你有检查过jar文件中的pom.xml吗?提取它并检查位置是否正确。 - Sambhav Sharma
这不是一个很大的POM文件,它是由Maven自动生成的,以下是其内容:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>dependMav</groupId> <artifactId>utill</artifactId> <packaging>jar</packaging> <version>1.0</version> <name>utill</name> <url>http://maven.apache.org</url>
</project>
- Mr.Q

0

我刚遇到了同样的问题,评论中建议是由于损坏的jar文件导致的。我只是替换了它,而且命令没有任何额外的开关,如groupid、packaging等(因为它已经是一个maven jar)。

事实证明,这个jar文件是通过从Windows推送到git repo,然后拉到Linux盒子上来损坏的。解决方案是告诉get,jars是二进制文件,所以它不会转换行结束符-请参见这里:Jar file gets corrupted after pushing to github


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接