2014-02-14 2 views
1

Я создал проект войны maven и добавил API javaEE и openCSV. в eclipse Я могу видеть как банки, так и импортировать классы и использовать их без ошибок компиляции.Maven JAR - класс не найден Исключение

но при запуске приложения с помощью кота и пытается сохранить файл CSV, я получаю это исключение:

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

JavaEE апи работает нормально.

Я попытался добавить компиляцию, но это не принесло пользы.

это мой ПОМ:

<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' version' 6.0' вместо '7.0', и его область должна быть« предоставлена ​​», и если ошибка все еще существует, попробуйте выяснить, к какой зависимости принадлежит этот класс, и попробовать добавить его. – Omoro

ответ

1

Значение по умолчанию Java EE API, которые гм ... перепутались.

Они не предназначены для фактического запуска материала, а только для компиляции, на самом деле у них нет контента из-за некоторых авторских прав или любой другой проблемы, о которой я забыл.

Итак, когда вы определили зависимость вы должны указать:

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

Обратите внимание, что дополнительная «сфера» и добавить фактическую реализацию в вашу среду выполнения.

В качестве альтернативы (что я часто делаю для тестовых ящиков) вы могли бы включить фактическую реализацию, подобную реализации jboss.

0

Попробуйте это:

  1. правой кнопкой мыши на проекте затмений, содержащий ваш POM
  2. Нажмите на Properties
  3. Нажмите на Deployment Assembly

Затем убедитесь, что ваш Maven Dependencies в списке и что перед ними расположен путь разворота: WEB-INF/lib

Нажмите кнопку Add..., если необходимо, затем нажмите Apply и OK кнопок.

enter image description here

Смежные вопросы