Pytanie w sprawie jar, build-process, intellij-idea, java – Jak prawidłowo zbudować słoiki z IntelliJ?

403

Mam projekt, który zawiera pojedynczy moduł i pewne zależności. Chciałbym utworzyć jar, w oddzielnym katalogu, który zawiera skompilowany moduł. Ponadto chciałbym, aby zależności były obecne obok mojego modułu.

Niezależnie od tego, jak skręcę proces „build jar” IntelliJ, wyjście mojego modułu wydaje się puste (oprócz pliku META-INF).

Komputery są przeznaczone do automatyzacji. Jeśli nie lubisz pracy w świecie oprogramowania, piszesz skrypt i umieszczasz go na swojej PATH dla jasnej przyszłości hahaha ed22
Niesamowite, jak krótkotrwałe może być IDE w dzisiejszych czasach. To jest sposób na wiele pracy, aby stworzyć JAR !! SteelToe
Możesz też stworzyć język, który nie jest tak skomplikowany! Oh, czekaj ... Ludzie już to zrobili. devinbost
To nie powinno być trudne ... To naprawdę denerwujące, że coś tak podstawowego staje się obowiązkiem. Uwielbiam Javę, ale tego typu rzeczy nigdy nie są tak skomplikowane w żadnym innym języku. Steve the Maker
Rzeczywiście ta funkcja trochę się ukrywa. Podczas tworzenia nowego projektu powinien być domyślnie ustawiony lub przynajmniej umieszczony w podstawowej lokalizacji. Etamar Laron

Twoja odpowiedź

17   odpowiedzi
139

mam nadzieję, że pomoże to komuś! Znalazłem 2 możliwości tworzenia działających jar-ów w IntelliJ 2017.2

1. Tworzenie artefaktu z IntelliJ:

Przejdź do struktury projektu:

Utwórz nowy artefakt:

Wybierz klasę główną i zmień folder manifestu:

Musisz zmienić katalog manifestu:

<project folder>\src\main\java 

zamień „java” na „zasoby”

<project folder>\src\main\resources

Tak powinno wyglądać:

Następnie wybierasz zależności, które chcesz zapakować do swojego słoika, lub NEAR swojego pliku jar

Aby zbudować artefakt, przejdź do budowania artefaktów i wybierz opcję „odbuduj”. Spowoduje to utworzenie folderu „out” z plikiem jar i jego zależnościami.

2. Korzystanie z wtyczki maven-assembly

Dodaj sekcję kompilacji do pliku pom

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <finalName>ServiceCreate</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <archive>
                        <manifest>
                            <mainClass>com.svt.optimoo.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
Utwórz nową konfigurację uruchamiania / debugowania:

Wybierz aplikację:

Wypełnić formularzDodaj mavenowy cel „zespół: pojedynczy” po wykonaniu kompilacji jako ostatni

Zapisz go, a następnie uruchom

Ta procedura utworzy plik jar w folderze „target”

to powinna być najlepsza odpowiedź. Dzięki! Giorgos Lamprakis
Ta ścieżka MANIFESTU jest najbardziej krytyczna, dzięki @Zsolt Tolvaly fruqi
To działało dla mnie. To powinna być zaakceptowana odpowiedź. Norbert Bicsi
Drugie podejście jest dobre i działa. deep
27

Plik -> Struktura projektu

Hej @Crt Nie sprawdzałem właściwego pliku jar, najwyraźniej Inteliji wyprodukował dwa pliki jar na różnych katalogach, przeprosiny, moje złe, twoje rozwiązanie działa, dzięki samuel owino
@ Samuelowino nie doceniam tego, że tak mówisz. Wyjaśnij, co „w ogóle nie działa”. Crt
0

możesz użyć tego polecenia:

mvn package -DskipTests

Plik jar zostanie zapisany na docelowym Directoy.

1

Jar jest w porządku, ponieważ w katalogu 'output' znajduje się skompilowane wyjście (project / out / production //)

Chyba musisz uruchomić „make” przed budowaniem słoika

dla zależności po prostu zaznacz „pokaż bibliotekę” i wybierz, co chcesz.

1

Z Maven możesz korzystać z tej wtyczki:

 <build>
    <plugins>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>[path you class main]</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase> 
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
0

użyłem Intellij IDEA (wypróbowałem różne wersje) + Gradle. Kiedy skompilowałem projekt i zbudowałem słoik artifacf, jak wskazano w powyższych odpowiedziach, otrzymałem błąd - „brak głównego attrubute manifestu ...”

To rozwiązanie zadziałało dla mnie (specjalne podziękowania dla Thiliny Ashen Gamage (patrz wyżej) za napiwek):

Fragment - jeśli używasz bibliotek zewnętrznych i tworzysz projekt przezUstawienia projektu - Artefakty - Dodaj (+) - Słoik - Z modułów z zależnościami, a następnie prawdopodobnie z powodu błędu programu, którego folder META-INF z plikiem MANIFEST_MF nie zawiera słownika. Aby tego uniknąć, stwórzPUSTY plik jar.

Ustawienia projektu - Artefakty - Dodaj (+) - Słoik - PUSTY JAR. Zostanie dodany folder META-INFzasoby teczka. Następnie wybierz swoją główną klasę. Zobaczysz następującą strukturę słoika:Zwróć uwagę na obecność folderu META-INF Następnie możesz zbudować swój projekt i zbudować artefakty. To rozwiązanie działało również w aplikacjach javaFX.

0

src/main/java i użyj tego folderu jako lokalizacji folderu META-INF.

0

y z prawidłowym utworzeniem pliku MANIFEST.MF, mogą wystąpić konflikty podczas uruchamiania plików JAR generowanych przy użyciu

File > Project Structure > Artifacts > '+' > JAR > From modules with dependencies > .....

metoda wspomniana powyżej.

Zamiast tego sugeruję utworzenie pustego pliku JAR i ręczne dodanie wszystkich innych elementów do głównego katalogu wyjściowego. Wspaniały artykuł na blogu dotyczący tej metody można znaleźć tutaj:http://karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/ Próbowałem wymienionych tam kroków i wszystko działało dobrze dla mnie!

Dzięki, to mi pomogło! Wydaje się, że w Intellij występuje błąd, w którym manifest projektu jest zastępowany w JAR domyślnym manifestem, jeśli wybierzesz „JAR” jako typ artefaktu zamiast „Inne”. red
1

http://maven.apache.org). Możesz go użyć jako głównego procesu budowania aplikacji lub po prostu wykonać pewne zadania w oknie dialogowym Edytuj konfiguracje. Proces tworzenia JAR modułu w Maven jest dość trywialny, jeśli chcesz, aby zawierał wszystkie zależności w samowykonywalnym pliku JAR, który jest również trywialny.

Jeśli nigdy wcześniej nie korzystałeś z Mavena, to chcesz go przeczytaćLepiej buduje z Maven.

Link jest martwy (październik 2014) KathyA.
Ponieważ życzę czytelnikowi odwiedzenia strony i rozpoczęcia procesu uczenia się. Gary Rowe
Maven jest oczywiście oczywisty dla prostych zadań, takich jak tworzenie słoika. Może Ant, ale na pewno nie maven. Juriy
@KathyA. Dzięki - zaktualizowałem, aby korzystać z zaleceń zespołu Maven. Gary Rowe
Jeśli to takie trywialne, dlaczego nie dołączyć go do swojej odpowiedzi? nuzzolilo
127

że te kroki są łatwe do wykonania, jeśli jakiekolwiek poprzednie rozwiązanie lub link brakuje szczegółów.

Jak utworzyć.jar przy użyciu IntelliJ IDEA 14.1.5:

Plik> Zapisz wszystko.Uruchom sterownik lub klasę główną metodą.Plik> Struktura projektu.Wybierz kartę „Artefakty”.Kliknij zielony przycisk plus w górnej części okna.Wybierz JAR z rozwijanego menu Dodaj. Wybierz „Z modułów z zależnościami”Wybierz klasę główną.Przycisk radiowy powinien wybrać „wyodrębnij do docelowego pliku JAR”. Wciśnij OK.Zaznacz pole „Build on make”Naciśnij Zastosuj i OK.Z menu głównego wybierz listę rozwijaną kompilacji.Wybierz opcję tworzenia artefaktów.
Po tym samym i mam błąd: Nie można znaleźć lub załadować głównej klasy JavaFundamentals.jar podczas uruchamiania tego pliku jar. Wyjaśniono tutaj:stackoverflow.com/questions/40636790/… laggerok19
czy coś przegapiłeś? Istnieje opcja dotycząca modułu, która powinna być taka. W moim przypadku tworzy JAR, ale JVM poprzez błąd z powodu bezpieczeństwa. sonus21
Myślę, że ta lista jest wszystkim. Możesz mieć coś z ustawieniami Java zatrzymującymi go z powodu bezpieczeństwa. Czy ktoś inny ma na ten temat jakieś przemyślenia? user5442490
Czy ten 12-etapowy proces musi być wykonywany za każdym razem, gdy chcę zbudować słoik, czy też IntelliJ zapamięta te działania, aby można było użyć do tego skrótu? Andy
0

ponieważ po ponownym zaimportowaniu projektu IntelliJ IDEA z projektu Maven wszystkie zmiany zostaną utracone.

Budowanie słoika musi być uruchamiane przez konfigurację uruchamiania / debugowania, a nie przez ustawienia projektu.

Jetbrains ma ładny opis tego, jak możesz to zrobić tutaj:

https://www.jetbrains.com/help/idea/maven.html

Przewiń w dół do sekcji „Konfigurowanie wyzwalaczy dla celów Maven”.

(Jedyną wadą ich opisu jest to, że ich zrzuty ekranu mają domyślny schemat kolorów czarno-białych zamiast super-niesamowitego motywu Darcula. Ugh!)

Zasadniczo to, co robisz, to otwieranie panelu „Projekty Maven”, znajdowanie interesującego projektu (w twoim przypadku, projektu, który buduje twój słoik) pod nim znajdziesz cel maven, który chcesz wykonać , (zazwyczaj cel „pakiet” tworzy słoiki) otwierasz na nim menu kontekstowe (kliknij prawym przyciskiem myszy na komputerze z systemem Windows), a pojawi się opcja „Wykonaj przed uruchomieniem / debugowaniem ...” wybierz, a stamtąd zabierze Cię za rękę. Naprawdę proste.

468

http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

Plik -> Struktura projektu -> Ustawienia projektu -> Artefakty -> Kliknij zielony znak plus -> Słoik -> Z modułów z zależnościami ...

Powyższe ustawia „szkielet” do miejsca, w którym jar zostanie zapisany. Aby faktycznie zbudować i zapisać, wykonaj następujące czynności:

Wyciąg do celu Jar

dobrze

Zbuduj | Zbuduj artefakt

Nie udaje się, gdy niektóre klasy w dołączonym słoiku są podpisane za pomocą RSA. Asif Shahzad
no main manifest attribute dla mnie nie działa ... Saeed
no main manifest attribute Yar
jak wygenerować osadzony jar Tomcat? Kenji
5

ale udało mi się go rozwiązać w ten sposób -> otwórz za pomocą winrar i usuń ECLIPSEF.RSA i ECLIPSEF.SF w folderze META-INF, ponadto wstaw „Main-class: main_class_name” (bez „.class” ) w MANIFEST.MF. Upewnij się, że nacisnąłeś „Enter” dwa razy po ostatniej linii, w przeciwnym razie nie zadziała.

Dla podpisanych zależności spójrz na tę odpowiedź:stackoverflow.com/questions/41746177/… user2241537
Co za szalony problem. Jakiś pomysł, dlaczego tak się dzieje lub jak naprawić? To jest hacky Andrew No
-4

czuję, że jest bardziej lekki, a Ty programista ma większą kontrolę. Niektórzy sugerują, że to jego minus :-)

Nic nie wyjaśnia, dlaczego błąd się dzieje. baordog
0

Kiedy używamte rozwiązanie ten błąd nadchodzi:

java -jar xxxxx.jar

brak głównego atrybutu manifestu, w xxxxx.jar

i rozwiązanie jest:

Musisz zmienić katalog manifestu:

<project folder>\src\main\java 

zmień Javę na zasoby

<project folder>\src\main\resources
0

IntelliJ IDEA 2018.3 Pomoc. Próbowałem i działało.

Aby zbudować plik JAR z modułu;

W menu głównym wybierz opcję Buduj | Zbuduj artefakt.

Z listy rozwijanej wybierz żądany artefakt typu JAR.Lista pokazuje wszystkie artefakty skonfigurowane dla bieżącego projektu. Aby zbudować wszystkie skonfigurowane artefakty, wybierz opcję Zbuduj wszystkie artefakty.

3

Metoda 1: Zbuduj jar z maven i pom.xmlPlik, nowy, projekt, mavenutwórz pakiet, utwórz program java wewnątrz tego pakietu

w pom.xml dodaj wtyczkę maven-jar-plug.

    <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>somePackage.sample</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>

zrzut ekranu:4. Otwórz pole projektu Maven, klikając ikonę wyszukiwania i wpisz Maven,

kliknij na czyste, a następnie kliknij na instalację

Twój plik jar pojawi się w folderze docelowym

przetestuj swój jar używając java -jar

Metoda 2: Zbuduj słoik z mavenem bez zmiany pom.xmlPlik, nowy, projekt, mavenutwórz pakiet, utwórz program java wewnątrz tego pakietu (tak jak powyżej)Plik -> Struktura projektu -> Ustawienia projektu -> Artefakty -> Kliknij zielony znak plus -> Słoik -> Z modułów zależnychBardzo ważne!

MANIFEST.MF musi znajdować się w folderze zasobów, a Main.Class musi odwoływać się do {package} - {class-name-that-includes-main-class}

następnie kliknij buduj w menu, buduj artefakty, buduj

znajdź słoik w folderze wyjściowym

Uruchom :)

Powiązane pytania