如何使用maven包含第二级依赖项

时间:2010-10-06 17:35:42

标签: maven-2 dependencies

我有一个项目A,它的pom.xml依赖:

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-email</artifactId>
        <version>1.2</version>
    </dependency>

commons-email取决于javax.mail-1.4.1

我运行mvn install将projectA.jar安装到本地maven repo。

在项目B中,我依赖projectA.jar。 当我运行项目B时,由于javax中缺少类文件而失败:

DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
java.lang.ClassNotFoundException: com.sun.mail.smtp.SMTPTransport

如何成功运行项目B而不显式为javax.mail jar设置maven条目?


编辑:

我想我发现了这个问题。 我正在使用带有true的maven-shade-plugin,它正在删除org.apache.commons:commons-email:安装(.m2)项目中的jar依赖项一个pom文件。

注释项目A的maven-shade-plugin修复了依赖性问题。

1 个答案:

答案 0 :(得分:3)

  

如何成功运行项目B而不显式为javax.mail jar设置maven条目?

嗯,这很奇怪。 c.s.m.s.SMTPTransport应该由mail-1.4.1.jar提供,commons-emailmvn dependency:tree 的依赖关系。项目B应该传递它。

您可以在项目B上运行以下内容并发布输出

<project>
  ...
  <groupId>com.stackoverflow</groupId>
  <artifactId>Q3875317-A</artifactId>
  <dependencies>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-email</artifactId>
      <version>1.2</version>
    </dependency>
  </dependencies>
</project>

更新:您的依赖项肯定有些奇怪,我无法重现这个问题。

我使用以下pom快速创建了第一个项目:

<project>
  ...
  <groupId>com.stackoverflow</groupId>
  <artifactId>Q3875317-B</artifactId>
  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>Q3875317-A</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</project>

另一个取决于第一件神器:

{{1}}

这是我为第二个项目获得的依赖树:

$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'dependency'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Q3875317-B
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] com.stackoverflow:Q3875317-B:jar:1.0-SNAPSHOT
[INFO] +- com.stackoverflow:Q3875317-A:jar:1.0-SNAPSHOT:compile
[INFO] |  \- org.apache.commons:commons-email:jar:1.2:compile
[INFO] |     +- javax.mail:mail:jar:1.4.1:compile
[INFO] |     \- javax.activation:activation:jar:1.1:compile
[INFO] \- junit:junit:jar:3.8.1:test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
...

正如所料,一切都在那里。

如果您得到的结果不同,如果您的POM有任何明显之处,请向他们展示。

PS:我删除了我最初建议的命令之一,因为它不允许看到传递依赖。