2017-05-16 6 views
2

Vous avez essayé de créer un gros fichier contenant toutes les dépendances à l'aide du module maven-assembly. Essayé un tas de choses, mais se retrouver avec l'erreur de classe principale non trouvée. On dirait que j'ai frappé un mur, je suis là depuis quelques heures maintenant.Exécution d'un fichier jar exécutable créé par maven-assembly: Erreur: Impossible de trouver ou de charger la classe principale

pom.xml extrait:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>foobar</groupId> 
    <artifactId>foobar</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <outputDirectory>/home/jars/foobar/</outputDirectory> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>com.foobar.Main</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies>...</dependencies> 
</project> 

commandes Maven exécutées:

mvn clean compile assembly:single

mvn package assembly:single

mvn clean compile package assembly:single

Crée pot dans /home/jars/foobar/foobar-1.0-SNAPSHOT-jar-with-dependencies.jar comme prévu

MANIFEST.INF dans META-INF

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Built-By: user 
Created-By: Apache Maven 3.3.9 
Build-Jdk: 1.8.0_131 
Main-Class: com.foobar.Main 

Java commandes exécutées:

java -jar foobar-1.0-SNAPSHOT-jar-with-dependencies.jar

java -cp foobar-1.0-SNAPSHOT-jar-with-dependencies.jar com.foobar.Main

java -jar foobar-1.0-SNAPSHOT-jar-with-dependencies.jar -cp com.foobar.Main

Tous renvoient la même erreur: Error: Could not find or load main class com.foobar.Main

OS: Fedora 25

java -version 
openjdk version "1.8.0_131" 
OpenJDK Runtime Environment (build 1.8.0_131-b12) 
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode 

javac -version 
javac 1.8.0_121 

mvn --version 
Apache Maven 3.3.9 (NON-CANONICAL_2016-07-01T11:53:38Z_mockbuild; 2016-07-01T17:23:38+05:30) 
Maven home: /usr/share/maven 
Java version: 1.8.0_131, vendor: Oracle Corporation 
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-1.b12.fc25.x86_64/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "linux", version: "4.10.13-200.fc25.x86_64", arch: "amd64", family: "unix" 

RESOLU:

La question est que le code source n'a pas été compilé se. Impossible de trouver le pot de code source dans le gros pot. On dirait que Maven suppose une certaine structure de paquet.

Ajouter ce qui suit à <build> résoudre le problème:

<sourceDirectory>src/com/foobar</sourceDirectory> 
+1

Essayez de regarder à l'intérieur du fichier .jar et voyez comment Maven a sécurisé les fichiers? Pouvez-vous voir votre classe? J'ai eu le même problème quand j'ai construit pour l'application Spring-boot où le plug-in a déplacé le fichier compatible pour Spring-boot mais ne peut pas être exécuté avec "java -jar ..." –

+0

Quel est le résultat si vous essayez ' maven installer'? –

+0

@MinhKieu C'était tout! Soupir! On dirait que Maven suppose une certaine structure de répertoire. Résolu en ajoutant ''. Si vous pouvez répondre à la question, je la marquerai comme la bonne. – user2354302

Répondre

1

Le plugin Maven ne restructuré le contenu du JAR pour le printemps-boot compatible qui peut provoquer la ligne de commande « java jar ... » pas travaille correctement. En tant qu'utilisateur utilisateur2354302 découvert, ajout de src/com/foobar aidé.