2017-02-01 3 views
0

Я пытаюсь запустить свое первое приложение с Java и Google Guice. Лучше всего я могу найти еще, где в Интернете не удалось решить мой вопрос. Когда я запускаю мое приложение Java с консоли я получаю следующее сообщение об ошибке:класс не найден исключение с Google Guice

[email protected] ~/dev/options/console/target $ java -jar ServerConsole-R1.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/inject/Module 
    at Application.Startup.main(Startup.java:38) 
Caused by: java.lang.ClassNotFoundException: com.google.inject.Module 

У меня есть Google Guice ссылки в моем файле POM. Maven не дает ошибок при вызове mvn -compile или mvn -install. Я проверил локальный каталог репозитория maven и загрузил файлы jice jar.

Моего файл П выглядит следующим образом:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>tatmancapital</groupId> 
    <artifactId>ServerConsole</artifactId> 
    <version>R1</version> 

    <dependencies> 
     <!-- https://mvnrepository.com/artifact/com.google.inject/guice --> 
     <dependency> 
      <groupId>com.google.inject</groupId> 
      <artifactId>guice</artifactId> 
      <version>4.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.inject.extensions</groupId> 
      <artifactId>guice-multibindings</artifactId> 
      <version>4.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.guava</groupId> 
      <artifactId>guava</artifactId> 
      <version>21.0</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
     <plugin> 
      <!-- Build an executable JAR --> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>3.0.2</version> 
      <configuration> 
      <archive> 
       <manifest> 
       <addClasspath>true</addClasspath>    
       <mainClass>Application.Startup</mainClass> 
       </manifest> 
      </archive> 
      </configuration> 
     </plugin>   
     </plugins> 
    </build> 
</project> 

Я приоткрыл файл банки и сравнил его с пружинной загрузкой файла проект баночки и я найти недостающую папку в файле фляги под названием: BOOT-INF.

Кажется, что у меня есть все ссылки правильные. Но на выходе сборки отсутствуют поддерживающие файлы jar.

Что не хватает?

Thnx Matt

+0

Вы можете попробовать - обновить 'com.google.inject: guice' до' 4.1.0' и создать банку с помощью 'mvn package' – nullpointer

+0

Результаты. выходной файл Jar составляет всего 4K и содержит только код приложения. – tatmanblue

+0

4K кажется слишком маленьким. Также не уверен в 'jar-plugin'. Мы упаковали, используя «плагин тени». Кажется, мы отлично работаем для нас. Не могли бы вы также поделиться структурой каталогов модулей. – nullpointer

ответ

0

Я закончил с использованием другого пакета.

Моего новый файл П выглядит следующим образом (я также удалена неиспользуемая зависимость, показанную выше, но это изменение не решить мою проблему):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>tatmancapital</groupId> 
    <artifactId>ServerConsole</artifactId> 
    <version>R1</version> 

    <dependencies> 
     <dependency> 
      <groupId>com.google.inject</groupId> 
      <artifactId>guice</artifactId> 
      <version>4.1.0</version> 
     </dependency>  
    </dependencies> 

    <build> 
     <plugins>  
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>3.0.0</version> 
      <configuration> 
       <archive> 
        <manifest>    
        <mainClass>Application.Startup</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> <!-- this is used for inheritance merges --> 
        <phase>package</phase> <!-- bind to the packaging phase --> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin>  
     </plugins> 
    </build> 
</project> 

Это дал мне исполняемый файл JAR. Спасибо @nullpointer.

Название файла в банке ужасающее. Использование элемента имени пакета для манифеста не повлияло на него.

M

0

С этой целью в ПОМ/вы должны иметь две разные банки, ServerConsole-R1.jar и ServerConsole-R1-Jar-с-dependencies.jar, попробуйте выполнить второй

Первый маленький jar может быть запущен через 'mvn java: exec', который добавляет все необходимые классы классов

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