2010-10-06 56 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