2014-12-24 89 views
3

我可以在本地機器上構建我的Java項目,它使用maven成功構建。但是,當我在Jenkins機器上構建它時,出現編譯錯誤:Maven錯誤:程序包不存在

package javax.jms does not exist

這是什麼意思?它在哪裏尋找javax.jms?在本地m2回購中,classpath?

我不得不作出以下修改我的pom.xml得到它工作在Linux上:

一)明確指出Maven的網站插件版本2.1。 org.apache.maven.plugins Maven的網站插件改變Maven的萬無一失插件版本 2.1

B)從2.4.3 2.18.1 Maven的萬無一失,插件 2.18.1

三)增加了以下的依存關係:

 <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>1.4</version> 
    </dependency> 

    <dependency> 
     <groupId>commons-cli</groupId> 
     <artifactId>commons-cli</artifactId> 
     <version>1.2</version> 
     </dependency> 

     <dependency> 
      <groupId>com.xx.yyy</groupId> 
      <artifactId>jms</artifactId> 
      <version>1.1</version> 
     </dependency> 

     <dependency> 
      <groupId>com.xx.yyy</groupId> 
      <artifactId>orm</artifactId> 
      <version>3.1.0.5</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.ldap</groupId> 
      <artifactId>spring-ldap-core</artifactId> 
      <version>1.3.0.RELEASE</version> 
     </dependency> 

爲什麼我必須改變在Linux上的pom.xml。該構建在我的Windows 7機器上運行,而無需更改pom.xml。

+0

你可以把你用來構建Maven的目標放到哪裏嗎?還有什麼依賴你用於javax.jms? –

+0

通常,當您在本地構建時,Maven將從互聯網上拉下所需的依賴關係。對於比較官方的構建,比如說企業環境,這些依賴關係將從標準的內部maven回購庫中提取。這可能只是將依賴添加到該回購的問題。 – unigeek

+0

您也可以查看Jenkins盒子上的Maven的settings.xml配置文件以查看存儲庫位置。見http://maven.apache.org/settings.html – unigeek

回答

0

首先,嘗試檢查您是否對Maven具有正確的依賴關係以獲取javax.jms程序包。您可以嘗試Apache Geronimo依賴項或JavaEE API。 (參考:What is the right Maven dependency for javax.jms.* classes?

對於Apache Geronimo

<dependency> 
    <groupId>org.apache.geronimo.specs</groupId> 
    <artifactId>geronimo-jms_1.1_spec</artifactId> 
    <version>1.1.1</version> 
    </dependency> 

對於JavaEE API

<dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>6.0</version> 
     <scope>provided</scope> 
    </dependency> 

此外,請確保您使用以下目標建立在Jenkins您的應用程序:

mvn clean install 

在你之後 在Jenkins機器上使用Maven構建您的應用程序,該包裝應出現在的Jenkins

+0

感謝您的幫助。 javax.jms駐留在Jenkins盒子上的本地存儲庫中。爲什麼它沒有選擇它?我可以調試maven命令以查看它在哪裏看? – user518066

+0

是的,你可以用這個命令檢查你的依賴關係樹http://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html –

+0

在我的本地窗口機器,maven構建工作正常。在Jenkins Linux上,我必須更新pom.xml(添加其他依賴項);這更新了類路徑,包括javax.jms jar。這解決了編譯/編譯錯誤。爲什麼它在我的本地Windows機器上工作,爲什麼我必須更新POM。在Linux上添加必要的jar到類路徑的xml?這是Linux機器上潛在的防火牆問題嗎? – user518066