2014-02-14 113 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