Maven-对于在Artifactory上部署的工件,无法解决传递依赖性

Anm*_*pta 5 java eclipse artifactory maven transitive-dependency

我有两个项目-A和B,其中A依赖于B。我将B打包为jar并将其部署在maven服务器(人工工厂)上,然后将该jar作为对项目A的普通依赖项包含在pom文件中。B的jar文件显示在项目A的Maven依赖项中,但项目B的依赖项未显示在依赖项层次结构中。这导致B的依赖项的类未找到异常。

但是,我的项目A和B在同一个Eclipse工作区中。当我打开项目B时,项目A开始从工作空间而不是远程存储库中引用项目B,并且一切正常。

这个问题-Maven。传递依存关系最接近我的问题,但是项目B的依存关系不是可选的。

怎么了

项目B的POM

<?xml version="1.0" encoding="UTF-8"?>
<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>com.myapp</groupId> 
  <artifactId>utils</artifactId>
  <version>1.0.0-RELEASE</version>
  <packaging>jar</packaging>

  <name>utils</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

<!-- Following doesn't get added to project A -->
  <dependencies>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
  </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

项目A的POM

<?xml version="1.0" encoding="UTF-8"?>
<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>com.myapp</groupId>
  <artifactId>core-app</artifactId>
  <version>1.0.0-RELEASE</version>
  <packaging>jar</packaging>

  <name>core-app</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>com.myapp</groupId>
      <artifactId>utils</artifactId>
      <version>1.0.0-RELEASE</version>
    </dependency>
  </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

我正在使用Maven快速入门原型。我的项目的项目结构为(我打包为jar):

project-name
  src/main/java
  src/test/java
  pom.xml
Run Code Online (Sandbox Code Playgroud)

Bre*_*den 7

要成功解决传递依赖项,项目 B 的 jar 和 pom.xml 必须可在 Maven 存储库中访问。将工件部署到远程存储库时,请确保 jar 和 pom.xml 都已部署并可供下载。

将必备文件部署到远程仓库后,使用命令行构建项目A。指定一个构建Maven目标来触发将所有依赖项下载到本地Maven仓库中。类似mvn compilemvn package将触发下载并成功构建项目 A 的东西。

有一次,项目B的jar和pom.xml都在本地的Maven仓库中,在Eclipse中更新Maven项目,它们会正确地重建和解析依赖关系。