maven w aplikacji j2se

0

hejm mam takie pytanie - czy ( i jakim pluginem) moge w mavenie spakowac wszystkie dependencje w mojego jara? Przykladowo, mam aplikacje Test.jar. Teraz wszystkie zaleznosci kopiuje (podczas budowania) do katalogu /target/lib. Czy moge zrobic tak by byly juz spakowane w jarze?

To samo tyczy sie propertiesow.

pzdr,
misty

0

Tylko ze takie zaleznosci spakowane do jara normalnie nie sa widzialne przez classloadery jvm, wiec klasy z nich nie beda widoczne. Chyba ze uzyjesz magii w postaci jarjar (w sumie antowy task), shade, one-jar. Przy czym wiekszosc (wszystkie?) nia pakuja jarow do jarow, tylko raczej 'merguja' jary:

twoj jar:
a.class
pakiet1/b.class

zaleznosc.jar:
c.class
pakiet2/d.class

Wynik:
a.class
c.class
pakiet1/b.class
pakiet2/d.class

a nie:

a.class
pakiet1/b.class
lib/zaleznosc.jar

0

hmm, czyli mam rozumiec ze jednak kopiowanie tych jarow do /target/lib jest ok? ze tak sie robi w aplikacjach j2se? Wiesz, minus ogromny jest taki, ze jak chce zainstalowac te aplikacje gdzies to musze ja ladowac razem z tym calym katalogiem /lib.. czy to jest ok?

pzdr,
misty

1

Normalnie w aplikacjach typu serwer (np. w tomcat) to sie robi tak, ze masz katalog z aplikacja, w nim katalogi:
bin - skrypty uruchomieinowe itp, np. run.sh - tutaj ustalane jest classpath, jakies opcje typu katalog z logami, obrazkami...
lib - wszystkie jary: glowny jar aplikacji plus zaleznosci
conf - jakies zewnetrzne pliki konfiguracyjne, ktore jako parametr przekazywane sa plikacji za pomoca skryptu bin/run.sh
logs, tmp, work, cokolwiek

taki skrypt run.sh dziala mniej wiecej tak:

  1. sprawdza czy jest zainstalowana java i jak ja odpalic; najczesciej sprawdza czy jest JAVA_HOME, jak nie to sprawdza czy w zmiennej srodowiskowej PATH jest gdzies java
  2. tworzy zmienna ktora trzyma classpath poprzez wylistowanie katalogu ../lib (.. bo run.sh jest w bin)
    x. przerabia opcje, sprawdza czy jest zdefinionwane JAVA_OPTS, CATALINA_OPTS (tomcat), GRADLE_OPTS (gradle), MAVEN_OPTS (maven), ... i ewentualnie dodaje je do wywolanego polecenia
  3. startuje jave znaleziona w #1 z classpath z #2, ewentualnie z opcjami z #x.

Tych krokow moze byc o wiele wiecej. Jesli nie potrzebujesz zadnej takiej konfiguracji ani nie chcesz pliku sh czy tam bat, a raczej uruchamialnego dwuklikiem jara, to w META-INF/MANIFEST.MF musisz miec dodany atrybut Class-Path ktory listuje twoje jary (pluginy mavenowe to potrafia same generowac) oraz jakies defaulty co do konfiguracji ktore nie sa wymagane jako argumenty do wywolania javy / aplikacji.

Sa jeszcze opcje ze mozna napisac execa, spakowac jave i wszystko do jednego jara (duzo wazy) lub nawet execa, itp. itd. W sumie za malo powiedzialas - nie wiemy jaki to typ aplikacji, czy ma lazic na wielu systemach czy tylko na jednym slusznym, czy sa konfigi i inne cuda wianki.

0

Mnie serwery aplikacji w tym przypadku nie interesuja. Napisalam (w tytule ;) ) ze to zwykla aplikacja j2se, standalone. Tyle ze budowana mavenem. I strasznie nie podoba mi sie ze aby to gdzies wgrac do katalogu X to musze wgrywac tez /lib z dependencies :/

0

Ja nie mowie nic o serwerach aplikacji. Tomcat to jest zwykla aplikacja j2se, ale sam jest serwerem - o to mi chodzilo.
Przeciez podalem wczesniej inne sposoby - pakowanie za pomoca jarjar czy innych. Jest jeszcze maven-assembly-plugin i jego assembly:single. Ale tutaj masz problem jesli pliki maja taka sama nazwe - np. w jarze masz tylko 1 META-INF/MANIFEST.MF, i pytanie z ktorego jara zostanie wgrany? Problem moze nastapic z plikami konfiguracyjnymi jesli maja taka sama nazwe, np. log4j.xml czy inne.

1

@misty - akurat na jednej ze stronek znalazlem taki artykul:
http://java.dzone.com/articles/simple-powerful-concept
Moze sie przyda.

0

dzieki!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1