2009-02-02 12 views
46

Próbuję zbudować plik wykonywalny jar, który zależy od zewnętrznego słoika pobranego. W moim projekcie umieściłem je w ścieżce budowania i można je uruchomić i debugować w środowisku Eclipse.Eclipse: Jak zbudować plik wykonywalny z zewnętrznym słojem?

Kiedy próbowałem wyeksportować go do słoika, mogę uruchomić program, ale nie mogę, gdy próbuję nacisnąć przycisk, który zawiera wywołania funkcji i klasy z zewnętrznego słoika. Zmodyfikowałem zmienne środowiskowe (Windows XP) CLASSPATH, aby uwzględnić ścieżki wszystkich zewnętrznych słoików, ale to nie działa.

Należy zwrócić uwagę na to, że podczas eksportowania pliku wykonywalnego mam ostrzeżenia kompilujące, ale nie ma opisu ostrzeżeń.

Czy ktoś uprzejmie poda dokładny przewodnik, jak włączyć zewnętrzny program jar za pomocą Eclipse?

+3

Nie rób tego. Poważnie, nigdy nie polegaj na swoim IDE, aby stworzyć artefakt budowy, używaj w tym celu skryptów (maven, mrówka). – Marko

+0

Maven and Ant są wymienione jako alternatywy. Mógłbym wymienić bardziej niejasne narzędzia do budowania, ale te dwa są standardowe. Nie ma sensu dalej się rozwijać, ponieważ istnieje już wiele informacji na ich temat. – Marko

Odpowiedz

14

Można to zrobić przez writing a manifest dla jar. Spójrz na nagłówek Class-Path. Eclipse ma opcję wyboru własnego manifestu na eksport.

Alternatywą jest dodanie zależność do ścieżki klasy w momencie wywołania aplikacji:

win32: java.exe -cp app.jar;dependency.jar foo.MyMainClass 
*nix: java -cp app.jar:dependency.jar foo.MyMainClass 
+5

Ta ostatnia sugestia nie zadziała. Argument '-cp' (i' -classpath') jest ** ignorowany ** w przypadku użycia '-jar' . – BalusC

+0

@BalusC - masz rację; zależność musiałaby znajdować się w manifeście, będę edytować odpowiedź: – McDowell

+0

@McDowell: dziękuję - nigdy nie całkiem rozumiem. –

5

Jako dobrą praktykę można użyć Ant Script (Eclipse jest z nim), aby wygenerować plik JAR. Wewnątrz tego JAR-a możesz mieć wszystkie zależne biblioteki.

Można nawet ustawić nagłówek ścieżki klasy MANIFEST, aby wskazywał na pliki w systemie plików, ale nie jest to dobra praktyka.

przykład skrypt Ant build.xml:

<project name="jar with libs" default="compile and build" basedir="."> 
<!-- this is used at compile time --> 
<path id="example-classpath"> 
    <pathelement location="${root-dir}" /> 
    <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" /> 
</path> 

<target name="compile and build"> 
    <!-- deletes previously created jar --> 
    <delete file="test.jar" /> 

    <!-- compile your code and drop .class into "bin" directory --> 
    <javac srcdir="${basedir}" destdir="bin" debug="true" deprecation="on"> 
     <!-- this is telling the compiler where are the dependencies --> 
     <classpath refid="example-classpath" /> 
    </javac> 

    <!-- copy the JARs that you need to "bin" directory --> 
    <copy todir="bin"> 
     <fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" /> 
    </copy> 

    <!-- creates your jar with the contents inside "bin" (now with your .class and .jar dependencies) --> 
    <jar destfile="test.jar" basedir="bin" duplicate="preserve"> 
     <manifest> 
      <!-- Who is building this jar? --> 
      <attribute name="Built-By" value="${user.name}" /> 
      <!-- Information about the program itself --> 
      <attribute name="Implementation-Vendor" value="ACME inc." /> 
      <attribute name="Implementation-Title" value="GreatProduct" /> 
      <attribute name="Implementation-Version" value="1.0.0beta2" /> 
      <!-- this tells which class should run when executing your jar --> 
      <attribute name="Main-class" value="ApplyXPath" /> 
     </manifest> 
    </jar> 
</target> 

36

Eclipse 3.5 ma możliwość pakować wymagane biblioteki do runnable słoika. Plik -> Eksportuj ... Wybierz działające słoiki i kliknij przycisk Dalej. Okno eksportu uruchamialnego słoika ma przycisk opcji, w którym można spakować wymagane biblioteki do słoika.

+1

Wydaje się być dobrym. Poza tym, że muszę mieć konfigurację uruchamiania. Ale tworzenie fałszywej konfiguracji uruchamiania nie stanowi problemu. –

+6

To (puszka) również generuje plik budowy Ant, który może zostać uruchomiony później szybko (niezależnie od tego, czy znajduje się wewnątrz IDE, czy poza IDE). Najlepsze z obu światów! –

8

Jak to słoiki swojego projektu do swojego runnable słoik:

Używam Eclipse wersja: 3.7.2 działa na Ubuntu 12.10. Pokażę ci również, jak zrobić build.xml, abyś mógł wykonać ant jar z linii poleceń i utworzyć swój jar z innymi importowanymi słoikami wyodrębnionymi do niego.

Zasadniczo prosi Eclipse o skonstruowanie pliku build.xml, który zaimportuje twoje biblioteki do twojego słoika.

  1. odpalić Eclipse i utworzyć nowy projekt Java, zrobić nowy pakiet „mypackage”, dodaj swoją główną klasę: Runner umieścić ten kod tam.

    enter image description here

  2. Teraz obejmują mysql-connector-java-5.1.28-bin.jarfrom Oracle która pozwala nam napisać Java, aby połączyć się z bazą danych MySQL. Zrób to, klikając prawym przyciskiem myszy projekt -> właściwości -> ścieżka budowania java -> Dodaj słoik zewnętrzny -> wybierz plik mysql-connector-java-5.1.28-bin.jar.

  3. Uruchom program w środowisku Eclipse, powinien uruchomić się i powiedzieć, że nazwa użytkownika/hasło jest nieprawidłowe, co oznacza, że ​​Eclipse jest prawidłowo skonfigurowany za pomocą słoika.

  4. W Eclipse iść do File ->Export ->Java ->Runnable Jar File. Zobaczysz to okno:

    enter image description here

    upewnij się, aby ustawić opcję „zapisz jako ant skrypt”. To właśnie sprawia, że ​​możesz użyć wiersza poleceń, aby później zrobić ant jar.

  5. Następnie przejdź do terminalu i spojrzeć na ant skryptu:

    enter image description here

Więc widzisz, wpadłem słoik i to nie z powodu błędów stwierdzono wliczone mysql-connector-java-5.1.28-bin.jar osadzone wewnątrz Hello.jar.

zajrzeć Hello.jar: vi Hello.jar i widać wiele odniesień do com/mysql/jdbc/stuff.class

Aby zrobić ant jar w linii poleceń, aby zrobić to wszystko automatycznie: Zmiana nazwy buildant.xml do build.xml i zmienić nazwę docelową z create_run_jar do jar.

Następnie z poziomu MyProject wpisujesz ant jar i bum. Masz swój słoik w MyProject. Możesz go wywołać, używając java -jar Hello.jar i wszystko działa.