Maven安装文件不解析依赖项

时间:2014-12-18 20:06:13

标签: java maven jar

我将一个组件打包到一个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的命令行参数。

2 个答案:

答案 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文件中,然后尝试安装   它到另一个发展系统

从高层来看,您似乎模糊了本地开发构建(快照)和发布版本(复制到其他服务器的文件)这一行。

我说你要在本地检查源代码并在那里进行构建,或者使用二进制仓库在系统之间发布工件,这样会更快乐。