2017-02-01 1 views
0

Je suis en train de commencer ma première application avec Java et Google Guice. Meilleur que je suis capable de trouver d'autres où sur le web n'a pas été en mesure d'aborder ma question. Quand je lance mon application java à partir de la console que j'obtiens l'erreur suivante:classe pas trouvé exception avec 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 

J'ai Google Guice référencé dans mon fichier pom. Maven ne donne pas d'erreur quand j'appelle mvn -compile ou mvn -install. J'ai vérifié le répertoire local maven respository et il a téléchargé les fichiers jar guice.

Mon fichier pom ressemble à ceci:

<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> 

J'entrouvrit le fichier jar et par rapport à une botte de printemps fichier jar de projet et je trouve un dossier manquant dans le fichier jar appelé: BOOT-INF.

Il semble que j'ai toutes les références correctes. Mais la sortie de construction manque les fichiers jar de support.

Que manque-t-il?

Thnx Matt

+0

pourriez-vous essayer - mettre à jour 'com.google.inject: guice' à' 4.1.0' et créer un pot en utilisant 'mvn package' – nullpointer

+0

même résultats. le fichier Jar de sortie est à peine 4K et ne contient que mon code d'application. – tatmanblue

+0

4K semble trop petit. Pas sûr non plus de 'jar-plugin'. Nous avons emballé en utilisant le 'plugin d'ombre '. Cela semble fonctionner correctement pour nous. Pourriez-vous partager également la structure du répertoire du module? – nullpointer

Répondre

0

Je fini par utiliser un package différent.

Mon nouveau fichier pom ressemble à ceci (j'ai aussi supprimé des dépendances non utilisées ci-dessus, mais ce changement n'a pas résolu mon problème):

<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> 

Cela m'a donné un fichier exécutable JAR. Merci @nullpointer.

Le nom du fichier jar est épouvantable. L'utilisation du membre de nom de package pour le manifeste ne l'a pas affecté.

M

0

Avec cette pom dans la cible/vous devez avoir deux bocaux différents, ServerConsole-R1.jar et ServerConsole-R1-pot avec-dependencies.jar, essayez d'exécuter la deuxième

Première petite jar peut être exécuté via 'mvn java: exec' qui ajoute tous les chemins de classes nécessaires