Maven2 kompilacja i budowanie

0

Witam z racji tego ze ktos chyba pochopnie wyrzucil mojego poprzedniego posta do kosza ponawiam problem:

Chce zbudowac mavenem2 jar'a. mam:
src/java/main ->katalog z moimi packages (czyli pliki *.java)
oraz maven dependences i o tą druga częsc mam pytania, a konkretnie:

1)Jak to jest ze mam (inny projekt na ktorym sie wzoruje) z dolaczonymi jarami zaleznymi(umieszczone w Maven Dependencies) ale w pliku pom.xml ich nie ma ... jak dolączam do swojego pom.xml to za kazdym razem dolączane sa tagi do xmla. jak usunę tag z POMa to znika mi plik z Maven Dependencies

  1. jak zrobic by w jar mojego projektu byly oprocz klas projektu jakies zalezne pliki class (bo teraz albo nie wrzuca ich albo wrzuca zalezne jar-y do wyjsciowego jara projektu te ktore zrobilem jako Maven Dependencies) a chce zeby z plikow JAR wybral niektore z plikow class i wrzucil je do mojego JAR

Dokopalem sie do ksiazki Better build with maven (darmowa do pobrania z neta) no i tam nic nie znalazlem

na necie dokopalem sie do:

 <plugin>
	    <artifactId>maven-jar-plugin</artifactId>
</plugin>

ale dalej nie wiem co i jak i do konca nie wiem czy tym sie da to zrobic

bo do tej pory wrzuca mi do mojego jara inne jary zalezne albo w ogóle nie wrzuca. Przenosze aplikacje z Jbuildera i tam wynikowy jar mial wiecej plikow class zaleznych od projektu (robione to bylo antem i modulami jakos)

Chodzi mi o to jak wyciagnac (i czy w ogóle sie da) class z jarow zaleznych ktore sa potrzebne do funkcjonowania mojego jara


0

@Oberon, jak coś darmowego znalazłeś to dawaj linka. Co do problemu to już wstępnie opisałem ci co i jak. Generalnie jest tak, że nie ma dostępu do klas w pliku jar umieszczonego w innym jarze. Innymi słowy jeżeli w jednym jarze masz jara zależnego to nie masz do niego dostępu.
Oznacza to że musisz zrobić jara z aplikacją i odpowiednim manifestem. W manifeście musisz umieścić ścieżkę względną, w stosunku do jara z aplikacją, do jarów zależnych. Jeżeli zatem masz:

/..
/lib
  |-Dependency.jar
-MyApp.jar

to w manifeście musisz mieć wpis:

Class-Path: lib/Dependency.jar

ale w pom.xml

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-jar-plugin</artifactId>
 <configuration>
  <finalName>MyApp</finalName>
  <archive>
   <manifest>
    <mainClass>my.app.Main</mainClass>
    <addClasspath>true</addClasspath>
   </manifest>
   <manifestEntries>
    <Class-Path>
     lib/Dependency.jar
    </Class-Path>
   </manifestEntries>
  </archive>
 </configuration>
</plugin>

następnie należy skopiować Dependency.jar do katalogu lib/ z katalogu src/main/lib. Jest na to task antowy w mavenie. Zresztą przeczytaj dokładnie jak zrobione jest to na:
http://koziolekweb.blogspot.com/2007/10/egg-framework-i-manifest-padziernikowy.html
najpierw tworzę jara, a następnie kopiuję zależności.

0

Niestety to jest projekt z roboty wiec kicha ze zrodlami :-/

cholipa srednio to wyglada wiec bo jak same jary z Maven dependency wrzuce do jar-a to zajmuja 50 MB wiec srednio chyba to ma sens gdy na Jbuilderze zbudowany projekt ma <1MB :/

Wlasnie czytam caly czas od rana strony i rozne projekty tworzone mavenem2 no i tez to wywnioskowalem ze raczej bieda bedzie

Tak jak mowisz ludzie wrzucaja do APP-INF/lib pliki jar

Bo mialem pomysl zeby przeniesc pewna rzecz na Eclipsa bo na Jbuilderze sie tak srednio pracowalo itp itd.

Jeszcze cos poprobuje dzieki za pomoc [browar]

0
Koziołek napisał(a)

Generalnie jest tak, że nie ma dostępu do klas w pliku jar umieszczonego w innym jarze.

No generalnie dostępu nie ma, ale... ściągnij sobie OneJAR.
Integrowanie tego z mavenem może być cokolwiek toporne, zapewne trzeba by plugin napisać, ale w Ancie robi się bosko:

<target name="build.jar" depends="compile">
    <one-jar destfile="${basedir}/wynikowy.jar" manifest="${basedir}/manifest.mf">
                <main>
	            <fileset dir="${basedir}/classes"/>
	            <fileset dir="${basedir}/src/main/resources"/>
	        </main>
		<lib>
	    	    <fileset dir="${basedir}/lib" />	    	    
	    	    <fileset dir="${basedir}/splash" />
		</lib>
    </one-jar> 	    
</target>

A plik manifest.mf:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Main-Class: com.simontuffs.onejar.Boot
SplashScreen-Image: lib/splash.png
One-Jar-Main-Class: twoja.klasa.Main
One-Jar-Expand: false
One-Jar-Show-Expand: false

Oczywiście możesz dołaczyć tylko niektóre liby specyfikując odpowiedni <fileset>.
Po zbudowaniu aplkację odpala się: java -jar wynikowy.jar
I jeszcze się ładny splash-screen włączy jeśli masz Java 6.

BTW: czemu Maven? Gdy próbujesz robić coś niestandardowego, jak np. wrzucenie niektórych jarów zależności do Twojego jara, Maven tylko przeszkadza. Wtedy zdecydowanie lepszy jest ANT+IVY. Może trochę więcej pisaniny w XMLu, ale możliwości, elastycznosć a przede wszystkim niezawodność o niebo lepsze.

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