我将一个组件打包到一个jar文件中,并尝试将其安装到另一个系统进行开发。我正在使用maven安装文件,如下所示(取自https://maven.apache.org/plugins/maven-install-plugin/examples/custom-pom-installation.html):
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=/home/user/myjar-1.2-SNAPSHOT.jar
Maven报告jar已成功安装:
[INFO] Installing /home/user/myjar-1.2-SNAPSHOT.jar to /home/user/.m2/repository/com/myorg/myjar/1.2-SNAPSHOT/myjar-1.2-SNAPSHOT.jar
[INFO] Installing /tmp/mvninstall1212121212121212121.pom to /home/user/.m2/repository/com/myorg/myjar/1.2-SNAPSHOT/myjar-1.2-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.235s
[INFO] Finished at: Thu Dec 18 14:36:19 EST 2014
[INFO] Final Memory: 9M/93M
[INFO] ------------------------------------------------------------------------
而且,我看到jar和pom文件都放在/home/user/.m2/repository/com/myorg/myjar/1.2-SNAPSHOT/中。但是,maven没有解析和下载任何依赖项。从myjar中提取并检查META-INF / maven / com.myorg / myjar / pom.xml,我看到依赖项列出了我的期望:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
</dependencies>
但是我本地.m2存储库中的.pom文件没有列出任何依赖关系或有关jar的其他信息。它包含的唯一信息是:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myorg</groupId>
<artifactId>myjar</artifactId>
<version>1.2-SNAPSHOT</version>
<description>POM was created from install:install-file</description>
</project>
尝试编写使用myjar组件的项目会导致例外情况:
java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
这是有道理的,因为maven决不会解决myjar的依赖关系。
我是否缺少一个标志或命令让maven解决这些依赖关系?如果有必要,我可以将jar提取到一个临时目录并直接利用pom文件,但是当maven已经能够潜入jar中找到groupId和其他字段的pom文件时,这似乎是一个不必要的步骤。
编辑:为了清楚说明,虽然我可以访问myjar的来源,但目标是myjar可以在没有来源的情况下被提供给第三方。我正在尝试确定这些步骤,以便在给予myjar时,第三方可以安装它和任何相关的依赖项并在本地开发。最好使用maven的命令行参数。
答案 0 :(得分:2)
如果这是您的项目,则应致电mvn install
。如果您尝试上传第三方jar,这是您需要的并且在Maven Central无法使用,那么您可以使用install:install-file
。但是,如果您遇到已知问题,请参阅https://jira.codehaus.org/browse/MINSTALL-110
答案 1 :(得分:-1)
一般来说,您应该使用Maven二进制存储库在系统之间移动文件,而不是install-file。查看Archiva,Artifactory和Nexus。
您应该将mvn local .m2目录视为缓存,而不是手动安装文件,否则您将发现您需要花费大量时间对存储库格式进行逆向工程。< / p>
我将一个组件打包到一个jar文件中,然后尝试安装 它到另一个发展系统
从高层来看,您似乎模糊了本地开发构建(快照)和发布版本(复制到其他服务器的文件)这一行。
我说你要在本地检查源代码并在那里进行构建,或者使用二进制仓库在系统之间发布工件,这样会更快乐。