2010-05-17 8 views
16

Mam następujący problem. Mam projekt Java w moim NetBeans IDE 6.8. Kiedy go skompiluję i wygeneruje plik .jar zawierający wszystko, co możliwe, META-INF nie ma racji. Nie zawiera klasy do wykonania - z metodą main().Jak ustawić klasę główną w pliku manifestu w słoiku wyprodukowanym przez projekt NetBeans

Po kliknięciu przycisku Uruchom w IDE wszystko działa. Ustawienia projektu są również ustawione we właściwy sposób - wskazując na klasę w moim projekcie.

Próbowałem dodać folder META-INF z plikiem manifestu, ale nie udało mi się.

Czy istnieje sposób zrobić to ręcznie w NetBeans, ponieważ odkryłem, że jeśli dodaję brakującą główną klasę w manifeście, wszystko działa.

(Chyba uderzył jakiś bug ...)

// edit: Wynik Jestem po to, że chcę słoik, który jest tworzony z kompilacji NetBeans być wykonywalny z polecenie:

Cytat Sun Documentation:

Gdy Main-Class znajduje się w pliku manifestu, można uruchomić aplikację z linii poleceń: java -jar app.jar

+0

najpierw są dwa rodzaje słoików, które możesz stworzyć ... jeden to prosty "słoik", drugi to "plik wykonywalny". na pewno utworzyłeś właściwy? Nigdy nie próbowałem tego w netbeans, ale eclipse zapewnia Ci wizzarda do utworzenia pliku wykonywalnego jar, w którym możesz wybrać główną klasę. Byłbym zaskoczony, gdyby netbeans nie oferował podobnych wskazówek ?! –

+0

@Philipp Andre: nie wiem, czy istnieje taki kreator, ale jest okno "preferencje projektu" i tam jest moja główna klasa, ale po kompilacji - nic w pliku manifestu –

+1

Naprawiłem mój problem, ale najpierw znalazłem to rozwiązanie więc chciałem opublikować tutaj http://stackoverflow.com/questions/15282098/netbeans-maven-project-not-adding-main-class-to-manifest –

Odpowiedz

26

Mam zamiar zrobić podsumowanie proponowanych rozwiązań i ten, który mi pomógł!

Po przeczytaniu tego raportu o błędzie: bug in the way NetBeans 6.8 creates the jar for a Java Library Project.

  1. Tworzenie manifestu.Plik mf w katalogu głównym projektu

  2. Edytuj manifest.mf. Kopalnia wyglądał mniej więcej tak:

    Manifest-Version: 1.0 
    Ant-Version: Apache Ant 1.7.1 
    Created-By: 16.3-b01 (Sun Microsystems Inc.) 
    Main-Class: com.example.MainClass 
    Class-Path: lib/lib1.jar lib/lib2.jar 
    
  3. Otwartych /nbproject/project.properties plików

  4. Add Line

    manifest.file=manifest.mf

  5. Clean + kompilacji projektu

Teraz .jar jest sukcesem w pełni zbudować.

Dziękuję bardzo vkraemer

+0

działa dobrze. Przypuśćmy, że użyję więcej niż 25 słoików. jak określić całą nazwę biblioteki w ścieżce klasy? – BasK

+0

Dla tych, którzy zastanawiają się, co oznaczają komendy, przykłady i MainClass: [Samouczek Oracle] (https://docs.oracle.com/javase/tutorial/deployment/jar/appar.html) _Chcemy wykonać główną metodę w klasie MyClass w pakiecie MyPackage po uruchomieniu pliku JAR. 'Main-Class: MyPackage.MyClass' (nie działa dla mnie) – Heinzlmaen

3

To jest proste.

  • prawym przyciskiem myszy na projekcie
  • Go do Properties
  • Przejdź do Run w Kategorie drzew
  • Ustaw Main Class in prawym panelu bocznym.
  • zbudować projekt

to wszystko. Mam nadzieję że to pomoże.

+2

to nie pomaga - opisałem to w pytaniu –

+0

Przepraszamy za mój wpis. Przegapiłeś linię w swoim pytaniu. –

+0

to nie działa dla mnie .. po cleaing projektu jego dawanie poprzedniej klasy ponownie – asiya

0

Dodanie pliku manifest.file = manifest.mf do pliku project.properties i utworzenie pliku manifest.mf w katalogu projektu działa poprawnie w wersji NB 6.9 i powinno działać również w wersji NB 6.8.

0

Jest to problem wciąż jak z 7.2.1. Stwórz bibliotekę, ponieważ nie wiesz, co zrobi, jeśli ją skręcisz.

Dowiedziono, jak rozwiązać ten problem. Edytować nbproject/project.properties, zmień następującą linię do fałszywy jak pokazano:

mkdist.disabled=false

Po tym można zmienić główne klasy w właściwości i będzie odzwierciedlone w manifeście.

1

W wersji 7.3 wystarczy włączyć Właściwości/Kompilacja/Pakiet/Kopia Biblioteki zależne i główna klasa zostaną dodane do manifestu podczas budowania w zależności od wybranego celu.

0

Prawdziwym problemem jest to, jak Netbeans JARs projektuje. "Ścieżka klasy:" w pliku manifestu jest niepotrzebna, kiedy faktycznie publikujesz program, z którego inni mogą korzystać. Jeśli masz zewnętrzną bibliotekę dodaną w Netbeans, działa ona jako pakiet. Proponuję użyć programu takiego jak WINRAR, aby wyświetlić pliki w słoiku i dodać swoje biblioteki jako pakiety bezpośrednio do pliku JAR.

Jak wewnątrz pliku jar powinien wyglądać:

MyProject.jar 

    Manifest.MF 
     Main-Class: mainClassFolder.Mainclass 

    mainClassFolder 
     Mainclass.class 

    packageFolder 
     IamUselessWithoutMain.class 
0

czytam i czytać i czytać, aby dowiedzieć się, dlaczego ja dostaję klasy nie znaleziono błąd, okazuje się, że manifest.mf miał błąd w linii:

Main-Class: com.example.MainClass 

Naprawiłem błąd przechodząc do właściwości projektu dialogowe (kliknij prawym przyciskiem projektu pliki), a następnie Uruchom i główną klasę i poprawiono wszystko, co Netbeans postanowił tutaj umieścić. Netbean wstawił nazwę projektu zamiast nazwy klasy. Nie mam pojęcia dlaczego. Prawdopodobnie pijany na muratinie ...

Powiązane problemy