当前位置: 首页 > 知识库问答 >
问题:

Maven安装文件未解析依赖项

齐驰
2023-03-14

我正在将一个组件打包到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>

但是。我本地的pom文件。m2存储库没有列出任何依赖项或有关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中查找group Id和其他字段的pom文件时,这似乎是一个不必要的步骤。

编辑:为了澄清这一点,虽然我可以访问myjar的源代码,但目标是myjar可以提供给没有源代码的第三方。我正在尝试确定步骤,以便在给定myjar时,第三方可以安装它和任何相关的依赖关系并在本地开发。最好是maven的命令行参数。

共有2个答案

谷梁弘深
2023-03-14

一般来说,应该使用Maven二进制存储库在系统之间移动文件,而不是安装文件。看看Archiva、Artifactory和Nexus。

您应该将mvn本地. m2目录视为缓存,而不是手动安装文件,否则您将发现不得不花费大量时间对存储库格式进行逆向工程。

我正在将一个组件打包到一个jar文件中,并试图将其安装到另一个系统中进行开发

从较高的层次来看,您似乎模糊了本地开发版本(快照)和发布版本(复制到另一台服务器的文件)的界限。

我想说,你会更高兴,或者只是在本地签出源代码并在那里进行构建,或者使用二进制repo在系统之间发布工件。

姚星河
2023-03-14

如果这是您的项目,您应该调用mvn install。如果您试图上传第三方jar,而您需要它,但在Maven Central无法使用,那么您可以使用install:install file。但是,您面临着一个已知的问题,请参见https://jira.codehaus.org/browse/MINSTALL-110

 类似资料:
  • 我使用的是Maven 3.1.1。当我运行时,我收到以下错误: 我的< code>pom.xml是:

  • 我正在创建一个新的Karaf特性,它将包含几个包(jclouds)。我还有一个maven“superproject”(jclouds-all),它包含我需要的所有模块/包。 在定义特性时,是否可以只指定一个SuperProject的bundle,并自动解析所有具体的bundle,或者我需要在特性中列出所有的bundle?

  • 当我试图导入依赖项时,我收到以下错误: 请帮帮我,我哪里错了? 事先谢谢你

  • If you have just checked out a package from version control, you will need to install those dependencies. If you are adding dependencies for your project, then those dependencies are automatically ins