Nainštaloval som aplikáciu, keď sa ju pokúsim spustiť (je to spustiteľný jar), nič sa nestane. Keď ju spustím z príkazového riadku pomocou: java -jar "app.jar"
dostanem nasledujúcu správu:
no main manifest attribute, in "app.jar"
Za normálnych okolností, ak by som program vytvoril sám, by som do súboru manifestu pridal atribút main class. Ale v tomto prípade, keďže súbor pochádza z aplikácie, to nemôžem urobiť. Skúsil som tiež rozbaliť jar, aby som zistil, či nájdem hlavnú triedu, ale je tam príliš veľa tried a žiadna z nich nemá v názve slovo "main". Musí existovať spôsob, ako to opraviť, pretože program beží v poriadku na iných systémoch.
Po prvé, je to trochu divné, vidieť, že spúšťate java -jar "app"
a nie java -jar app.jar
Po druhé, ak chcete vytvoriť spustiteľný súbor jar... musíte vytvoriť súbor s názvom META-INF/MANIFEST.MF
samotný súbor by mal mať (aspoň) tento jeden riadok:
Main-Class: com.mypackage.MyClass
Kde com.mypackage.MyClass
je trieda, ktorá obsahuje public static void main(String[] args) vstupný bod.
Všimnite si, že existuje niekoľko spôsobov, ako to urobiť buď pomocou CLI, Maven, Ant alebo Gradle:
Pre CLI stačí nasledujúci príkaz: (tks @dvvrt)
jar cmvf META-INF/MANIFEST.MF <new-jar-filename>.jar <files to include>
Pre Maven by malo stačiť niečo podobné ako nasledujúci úryvok. Všimnite si, že ide len o definíciu zásuvného modulu, nie o celý súbor pom.xml:
<build>
<plugins>
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.mypackage.MyClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
(Vyberte <verziu>
vhodnú pre váš projekt.)
Pre Ant by mal pomôcť nasledujúci úryvok:
<jar destfile="build/main/checksites.jar">
<fileset dir="build/main/classes"/>
<zipfileset includes="**/*.class" src="lib/main/some.jar"/>
<manifest>
<attribute name="Main-Class" value="com.acme.checksites.Main"/>
</manifest>
</jar>
Credits Michael Niemand -
Pre Gradle:
plugins {
id 'java'
}
jar {
manifest {
attributes(
'Main-Class': 'com.mypackage.MyClass'
)
}
}
Namiesto java -jar app.jar
malo byť java -jar "app"
.
Možnosť -jar
funguje len vtedy, ak je súbor JAR spustiteľný súbor JAR, čo znamená, že musí mať súbor manifest s atribútom Main-Class
. Pozrite si časť Balenie programov do súborov JAR, kde sa dozviete, ako vytvoriť spustiteľný súbor JAR.
Ak to'nie je spustiteľný súbor JAR, potom budete musieť program spustiť pomocou niečoho, ako napr:
java -cp app.jar com.somepackage.SomeClass
kde com.somepackage.SomeClass
je trieda, ktorá obsahuje metódu main
na spustenie programu. (Čo je to za triedu, závisí od programu, z informácií, ktoré ste poskytli, sa to nedá určiť).