Bir uygulama yükledim, çalıştırmaya çalıştığımda (çalıştırılabilir bir kavanoz) hiçbir şey olmuyor. Komut satırından çalıştırdığımda:
java -jar "app.jar"
Aşağıdaki mesajı alıyorum:
no main manifest attribute, in "app.jar"
Normalde, programı kendim oluşturmuş olsaydım, manifesto dosyasına bir ana sınıf niteliği eklerdim. Ancak bu durumda, dosya bir uygulamaya ait olduğu için bunu yapamıyorum. Ayrıca ana sınıfı bulup bulamayacağımı görmek için jar'ı çıkarmayı denedim, ancak çok fazla sınıf var ve hiçbirinin adında "main" kelimesi yok. Bunu düzeltmenin bir yolu olmalı çünkü program diğer sistemlerde sorunsuz çalışıyor.
Öncelikle, java -jar app.jar
değil de java -jar "app"
çalıştırdığınızı görmek biraz garip.
İkinci olarak, bir jar çalıştırılabilir yapmak için... META-INF/MANIFEST.MF adlı bir dosyayı jar yapmanız gerekir
dosyanın kendisinde (en azından) bu bir satır olmalıdır:
Main-Class: com.mypackage.MyClass
Burada com.mypackage.MyClass
public static void main(String[] args) giriş noktasını tutan sınıftır.
Bunu CLI, Maven, Ant veya Gradle ile yapmanın birkaç yolu olduğunu unutmayın:
CLI** için aşağıdaki komut yeterli olacaktır: (tks @dvvrt)
jar cmvf META-INF/MANIFEST.MF <new-jar-filename>.jar <dahil edilecek dosyalar>
Maven için, aşağıdaki kod parçacığı gibi bir şey işinizi görecektir. Bunun sadece eklenti tanımı olduğunu, tam pom.xml** olmadığını unutmayın:
<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>
(Projenize uygun bir <version>
seçin).
Ant** için aşağıdaki kod parçacığı yardımcı olacaktır:
<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 -
Gradle** için:
plugins {
id 'java'
}
jar {
manifest {
attributes(
'Main-Class': 'com.mypackage.MyClass'
)
}
}
Bunun java -jar "app"
yerine java -jar app.jar
olması gerekirdi.
jarseçeneği yalnızca JAR dosyası çalıştırılabilir bir JAR dosyasıysa çalışır, bu da içinde
Main-Class` niteliği olan bir manifest dosyasına sahip olması gerektiği anlamına gelir. Çalıştırılabilir bir JAR dosyasının nasıl oluşturulacağını öğrenmek için Programları JAR Dosyalarında Paketleme adresine bakın.
Eğer çalıştırılabilir bir JAR değilse, o zaman programı aşağıdaki gibi bir şeyle çalıştırmanız gerekir:
java -cp app.jar com.somepackage.SomeClass
burada com.somepackage.SomeClass
, programı çalıştırmak için main
yöntemini içeren sınıftır. (Bu sınıfın ne olduğu programa bağlıdır, verdiğiniz bilgilerden bunu söylemek imkansızdır).
Eğer kavanoz kurallara uymuyorsa, çalıştırılabilir bir kavanoz değildir.