Próbuję spakować projekt przy użyciu bibliotek OptaPlanner 6.0.1 do pliku .jar za pośrednictwem artefaktu jar IntelliJ IDEA, ale zamiast mojego manifestu.mf zawierającego standard
Manifest-Version: 1.0
Main-Class: a.b.c.app
jar wykorzystuje ten dostarczony w ecj-3.7.2.jar, jednej z bibliotek pomocniczych OptaPlanner:
Manifest-Version: 1.0
Build-Jdk: 1.6.0_26
Built-By: ibrandt
Created-By: Apache Maven
Archiver-Version: Plexus Archiver
Z tego "no main manifest attribute, in appname.jar"
powodu podczas próby uruchomienia aplikacji występuje błąd. Jeśli ręcznie zastąpię manifest w pliku .jar moim, wszystko działa poprawnie. Czy jest coś, co mogę zrobić, aby to naprawić?
Biblioteki trzymam w oddzielnym katalogu / lib i zostały dodane do katalogu głównego artefaktu jar jako Extracted Directory, IntelliJ IDEA to wersja 13.0.1.
java
intellij-idea
optaplanner
grudolf
źródło
źródło
Odpowiedzi:
Miałem ten sam problem.
Upewnij się, że plik MANIFEST.MF znajduje się w:
NIE
źródło
Naprawić:
źródło
Jak zauważono w komentarzu @ grudolf w jednej z pozostałych odpowiedzi, jednym ze sposobów (i jedynym, który zadziałał dla mnie w zaimportowanym projekcie Gradle) jest utworzenie pustego słoika w następujący sposób:
AKTUALIZACJA:
To zdecydowanie błąd w Idea. Ta połączona odpowiedź działa niezawodnie, gdy istnieją wyodrębnione katalogi. W istocie, można znaleźć swoją .idea / JARNAME.xml, dodać należy dodać następujący element na samym szczycie z
<root>
elementem dla słoika. Wszelkie wyodrębnione elementy znajdujące się powyżej nowej kopii pliku, które zawierają manifest, zablokują nowy manifest.źródło
Jeśli chcesz określić klasę główną, musisz dodać tę wtyczkę do pom.xml:
źródło
Miałem podobny problem.
Problem był w pliku pom.xml.
Nie wiem z jakiego powodu ten kod działa w zaćmieniu, ale nie w IntelliJ
To jest poprawne.
Manifest.mf działał !!!
Mam nadzieję, że to pomoże.
źródło
Istnieje kilka sposobów generowania plików JAR wykonywalnych. Korzystanie z funkcji GUI IntelliJ jest dobrym sposobem. Innym sposobem jest użycie Mavena (lub podobnie w gradle, buildr itp.), Który jest przyjazny dla serwera kompilacji:
Jest to mniej więcej możliwe do skopiowania z przykładowej kompilacji Optaplanner:
źródło
Aby nie mieć problemu takiego jak Manifest, powinieneś mieć katalog o nazwie „META-INF” w katalogu „src”. Więc utwórz go i umieść w nim plik o nazwie „MANIFEST.MF” z następującą zawartością:
Nie zapomnij zamienić nazwy pakietu zawierającej klasę główną powyżej!
źródło