2014-02-14 119 views
1

我創建了一個Maven戰爭項目並添加了javaEE API和openCSV。在eclipse中我可以看到jar和import類,並且在沒有任何編譯錯誤的情況下使用它們。Maven JAR - 類未找到異常

但是當我使用Tomcat,並試圖挽救一個CSV文件,我得到這個異常運行應用程序:

java.lang.NoClassDefFoundError: au/com/bytecode/opencsv/CSVWriter 

的JavaEE API工作正常。

我嘗試添加編譯,但它沒有任何好處。

這是我的POM:

<modelVersion>4.0.0</modelVersion> 
<groupId>com.training</groupId> 
<artifactId>DevProject</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 
<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>7.0</version> 
    </dependency> 
    <dependency> 
     <groupId>net.sf.opencsv</groupId> 
     <artifactId>opencsv</artifactId> 
     <version>2.3</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

這是拋出異常的代碼: CSVWriter作家=新CSVWriter(新的FileWriter( 「FILE.CSV」));

任何想法?

+0

您在部署的工件中缺少依賴關係/依賴關係。 –

+0

這取決於Eclipse(我猜)如何在Tomcat中運行您的應用程序。您是否嘗試將WAR(使用Maven)打包並將其部署在「真正」的Tomcat上? – Tome

+0

請嘗試'javaee-api'版本'6.0'而不是'7.0',它的範圍應該是'provided',如果錯誤仍然存​​在,請嘗試找出該類屬於哪個依賴項並嘗試添加它。 – Omoro

回答

1

默認的Java EE API的是嗯...搞砸了。

它們並不意味着實際運行的東西,但只是爲了編譯東西,他們實際上沒有任何內容,因爲一些版權或任何我忘記的問題。

所以,當你定義的依賴,你應該說明:

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

注意額外的「範圍」,並添加實際實現到運行時。另外(我經常做的是允許測試用例),你可以包含一個類似於jboss的實際實現。

0

試試這個:

  1. 在Eclipse項目上右鍵單擊包含POM
  2. 點擊Properties
  3. 點擊Deployment Assembly

然後檢查你的Maven Dependencies是在列表中,在他們面前的部署路徑是WEB-INF/lib

點擊Add...按鈕,然後點擊ApplyOK按鈕。

enter image description here