2010-10-06 23 views
2

我有一个pom.xml的依赖项目中,包括第2级依赖性:如何使用maven

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

公共电子邮件取决于javax.mail-1.4.1

我跑MVN安装将projectA.jar安装到本地maven仓库中。

在项目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罐子行家入门?


编辑:

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

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

+0

你是如何运行你的应用程序?它是一个特定于Maven的插件(例如jetty:run)还是你在eclipse中运行它? – 2010-10-06 22:26:33

+0

我正在使用mvn测试直接编译。没有月食。 – 2010-10-11 22:05:39

回答

3

如何在没有明确地为javax.mail jar显示maven条目的情况下成功运行项目B?

好吧,那很奇怪。 c.s.m.s.SMTPTransport应该由mail-1.4.1.jar提供,它是commons-email的依赖关系。项目B应该传递。

你能运行下列项目B和后期输出

mvn dependency:tree 

更新:肯定是有一些奇怪的与你相依,我不能重现该问题。

我很快就创建了以下POM第一个项目:

<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> 

而另一个根据第一产物:

<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> 

,这里是依赖关系树,我得到的第二个项目:

 
$ 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:我删除了最初建议的命令之一,因为它不允许看到传递依赖关系。

+0

当我运行mvn依赖项:树项目A,我得到: [信息] + - org.apache.commons:commons-email:jar:1.2:编译 [信息] + - javax.mail:mail:jar:1.4.1:compile [INFO] | \ - javax.activation:activation:jar:1.1:compile 当我在项目B上运行它时,我没有看到列出的依赖项: [INFO] + - com.q:PROJECT-A:jar:1.0 -SNAPSHOT:编译 – 2010-10-06 18:47:29

+0

我想我发现了这个问题。我正在使用带有 true的 true,它正在删除已安装(.m2)项目中的org.apache.commons:commons-email:jar依赖关系。pom文件。评论项目A的Maven-shade-plugin解决了这个问题。 – 2010-10-12 00:33:48