我有一个项目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修复了依赖性问题。
答案 0 :(得分:3)
嗯,这很奇怪。如何成功运行项目B而不显式为javax.mail jar设置maven条目?
c.s.m.s.SMTPTransport
应该由mail-1.4.1.jar
提供,commons-email
是mvn 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:我删除了我最初建议的命令之一,因为它不允许看到传递依赖。