Exécuter java jar - aucune erreur d'attribut de manifeste principal

j'ai créé un programme java simple (maven avec pom ) qui, lorsque j'exécute une commande avec CMD, devrait créer un fichier sous un chemin donné... Je ne mvn clean install qui finissent avec succès, Maintenant je veux utiliser ce jar créé à partir de la ligne de commande comme suit:

java -jar   "/Users/i012/IdeaProjects/myproj/target/test.rts-1.0-SNAPSHOT.jar" path2genfile2create 

Qui doit exécuter mon programme (ce la première fois que j'essaie quelque chose comme ça...)

Mais l'erreur qui Im obtenir est:

no main manifest attribute, in /Users/i012/IdeaProjects/myproj/target/test.rts-1.0-SNAPSHOT.jar

Qu'est-ce qui pourrait manquer ici ? qui attribut du Manifeste?

L'erreur ne vient pas de la classe que j'ai créé...

j'ai créé du META-INF/MANIFEST.MF n'aide pas mais peut-être est-ce mal!--4-->

7
demandé sur Jenny Hilton 2017-08-27 09:02:45

3 réponses

si vous utilisez le plug-in Maven assembly, ou votre outil IDE, vous avez besoin d'un mainClass élément. C'est ce que j'utilise:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <archive>
        <manifest>
          <mainClass>com.foo.MyMainClass</mainClass>
        </manifest>
      </archive>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
    </configuration>
    <executions>
      <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      </execution>
    </executions>
  </plugin>
8
répondu Kevin Boone 2017-08-27 07:57:32

un manifeste est un fichier du chemin META-INF/MANIFEST.MF dans le jar qui définit des attributs comme classpath et la classe principale pour exécuter le fichier jar.

la structure de base serait comme:

Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)

vous pouvez définir votre point d'entrée en ajoutant la propriété Main-Class: classname.

afin de créer votre fichier jar avec un manifeste, vous pouvez:

  1. utilisez votre IDE pour ajouter un manifeste au bocal qu'il génère.
  2. utilisez un commande de la forme jar cfm MyJar.jar Manifest.txt MyPackage/*.class pour créer manuellement un bocal avec le manifeste et les classes.
  3. décompresser manuellement le bocal, ajouter le manifeste et le compresser à nouveau. Les outils de Compression peuvent généralement faire cela avec une traînée/goutte.

Vous pouvez en savoir plus sur le fichier manifest jar ici.

4
répondu alirabiee 2017-08-27 06:13:09

dans mon cas, j'utilisais le spring-boot mais je n'ai pas mentionné mon constructeur dans ma pom donc je l'ai corrigé par:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
2
répondu saman 2018-01-21 12:16:15