2014-12-09 1 views
0

Я новичок в Maven, и я недавно создал эту программу, для которой требуется многозначная карта. Поскольку у меня не было jsr311-api.jar, я загрузил его из Интернета, но я не знаю, где их разместить. Я решил загрузить его в папку apache-maven/lib и попытался запустить программу, но это не сработало. Это ошибка, которую я получаю.java.lang.noclassdeffounderror for Maven

Exception in thread "main" java.lang.NoClassDefFoundError: javax/ws/rs/core/Mul 
ivaluedMap 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
    at java.lang.Class.privateGetMethodRecursive(Unknown Source) 
    at java.lang.Class.getMethod0(Unknown Source) 
    at java.lang.Class.getMethod(Unknown Source) 
    at sun.launcher.LauncherHelper.validateMainClass(Unknown Source) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.core.MultivaluedMap 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 7 more 

Я предположил, что у меня возникают ошибки при неправильном использовании файла .jar. Спасибо заранее за вашу помощь.

Это мой файл ПОМ, что я в настоящее время: http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0

<groupId>com.test.api</groupId> 
<artifactId>testing</artifactId> 
<packaging>jar</packaging> 
<version>0.1.0</version> 
<name>testPlatform</name> 

<properties> 
    <source.version>1.7</source.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

<build> 
    <plugins> 

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

    </plugins> 
</build> 

<dependencies> 
    <dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>3.8.1</version> 
    <scope>test</scope> 
</dependency> 
    <!-- REST client --> 
    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-client</artifactId> 
     <version>2.9.1</version> 
    </dependency> 

    <dependency> 
<groupId>javax.ws.rs</groupId> 
<artifactId>jsr311-api</artifactId> 
<version>0.11</version> 
</dependency> 

    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>2.3</version> 
    </dependency> 

    <!-- for deserialization --> 
    <dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>2.2.4</version> 
    </dependency> 



</dependencies> 

+0

Добавить зависимость от вашей пом. – bmargulies

+0

Его уже в файле pom. – Kito

+0

Как вы управляете кодом? Похоже, вы не включаете свои зависимости при запуске. – bmargulies

ответ

0

Я довольно уверен, что я знаю вашу проблему здесь.

вы используете Maven для компиляции кода и сделать банку файлы.

Затем вы пытаетесь выполнить этот файл jar извне maven с некоторой командной строкой java или другой.

Когда Maven называет Java для компиляции вашего кода, он добавляет все ваши зависимости к пути к классам.

Когда вы используете свой код, вы не являетесь.

Вы можете настроить плагин maven-dependency для записи текстового файла с именами путей всех ваших зависимостей, а затем вы можете использовать его для построения командной строки. или вы можете использовать плагин maven-surefire для запуска тестов или плагин exec-maven для запуска класса или плагина appassembler для сборки пакета с зависимостями и оболочкой командной строки или ...

Вот как сделать плагин зависимости выписывать свой путь к классу.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>build-classpath</id> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>build-classpath</goal> 
     </goals> 
     <configuration> 
     <outputFile>${project.build.directory}/classpath.txt</outputFile> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
+0

Я не совсем понимаю, что мне нужно сделать для настройки плагина зависимостей maven. – Kito

+0

Большое вам спасибо! Я смог запустить его! Однако я должен поместить его в classpath каждый раз, когда я запускаю эту программу? Есть ли лучший способ приблизиться к этому? – Kito

+0

http://mojo.codehaus.org/appassembler/appassembler-maven-plugin/ – bmargulies