Jar file v Jave je dobra vec na delivery jednoducheho programu, ktery nezavisi na zadnych knihovnach. Jakmile pouzijeme vic knihoven, musime uvest do parametru
--classpath vsechny jary, na kterych projekt zavisi. Pro jednou se to da zkousnout, ale resit to pokazde ? :)
Nastesti existuje reseni - jmenuje se
Fat Jar. Ten jde vytvorit napr. z Eclipsu pomoci
tohoto pluginu.
Je tu nekdo, kdo jeste pouziva ant? Tomu nasledujici clanek moc neprinese. Pro ty z Vas, kdo pouzivaji pro build a dependency managment maven, mam ukazku trochu slozitejsiho nastaveni
maven assembly pluginu.
Jedna se o plugin, ktery dokaze vzit zdrojovy kod a ve fazi buildeni (presneji v package goalu) rozjede vytvareni distribuce pro aplikaci. Je to takova nadstavba nad maven-jar/war/... pluginem.
Tady ukazu, jak jsem vybuildil Java SE aplikaci se Springem (Hibernatem atd.).
Vyskytli se 2 problemy.
- Je potreba pouzit posledni verzi (tj. 2.2-beta-3). Predchozi verze mela bug, ze misto toho, aby se pouzil jen jeden soubor stejneho jmena v classpath se konkatenovaly soubory do sebe.
- Unable to locate Spring NamespaceHandler for XML schema namespace, s posledni verzi pluginu proces reseni duplicit funguje tak, ze vyhraje prvni (resp. ta z projektu, ktery buildime). Spring potrebuje v META-INF mit soubory spring.handlers a spring-schemas. Je treba projit obsah vsech spring-* zavislosti a rucne konkatenovat obsah do sveho souboru v META-INF buildeneho projektu.
edit: Unable to locate schema namespace resi lepe maven shade plugin, viz http://maestro-lab.blogspot.com/2010/06/upgrading-to-spring-3-unable-to-locate.html
Co je potreba tedy nastavit? V prvni rade pom.xml!
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi="http://www.w3.org/2001/XMLSchema-instance" schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<build>
<plugins>
<plugin>
<artifactid>
maven-assembly-plugin
</artifactid>
<!-- verze je tu nutna, 2.2-beta-2 ma bug, kde se misto prepsani konkatenuji soubory se stejnym jmenem -->
<version>
2.2-beta-3
</version>
<executions>
<execution>
<id>
make-assembly
</id>
<phase>
package
</phase>
<goals>
<goal>
assembly
</goal>
</goals>
<configuration>
<appendassemblyid>
false
</appendassemblyid>
<!-- ve vetsine pripadu staci uvest
<descriptorrefs>
<descriptorref>jar-with-dependencies</descriptorref>
</descriptorrefs>
-->
<descriptors>
<descriptor>
${basedir}/src/assemble/fatJar.xml
</descriptor>
</descriptors>
<archive>
<manifest>
<mainclass>
your.package.name.Main
</mainclass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<!-- potrebujeme spojit spring.handlers a spring.schemas -->
<resources>
<resource>
<directory>
src/main/META-INF
</directory>
<targetpath>
META-INF
</targetpath>
</resource>
</resources>
</build>
</project>
Pokud nepotrebujeme nic excludovat, includovat, staci pouzit zmineny descriptor
jar-with-dependencies. Pokud ano, je treba jej poupravit a vytvorit spec. assembly skript. V tomto pripade
/src/assembly/fatJar.xml.
<assembly schemalocation="http://maven.apache.org/xsd/assembly-1.0.0.xsd" xsi="http://www.w3.org/2001/XMLSchema-instance">
<id>
fatJar
</id>
<formats>
<format>
jar
</format>
</formats>
<includebasedirectory>
false
</includebasedirectory>
<dependencysets>
<dependencyset>
<outputdirectory>
</outputdirectory>
<outputfilenamemapping>
</outputfilenamemapping>
<unpack>
true
</unpack>
<scope>
runtime
</scope>
</dependencyset>
</dependencysets>
<filesets>
<fileset>
<directory>
target/classes
</directory>
<outputdirectory>
</outputdirectory>
<!-- must exclude by hand content of src/main/release, there is no anything like fileSet priority -->
<excludes>
<exclude>
database.properties
</exclude>
<exclude>
log4j.xml
</exclude>
</excludes>
</fileset>
<fileset>
<directory>
src/main/release
</directory>
<outputdirectory>
</outputdirectory>
</fileset>
</filesets>
</assembly>
Pro ty kdo budete chtit vybuildit Spring aplikaci, pridavam jeste workaround pro pred chvili zminene soubory umistene v
src/main/META-INF.
spring.handlers
http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler
http\://www.springframework.org/schema/jee=org.springframework.ejb.config.JeeNamespaceHandler
http\://www.springframework.org/schema/lang=org.springframework.scripting.config.LangNamespaceHandler
http\://www.springframework.org/schema/security=org.springframework.security.config.SecurityNamespaceHandler
http\://www.springframework.org/schema/tx=org.springframework.transaction.config.TxNamespaceHandler
http\://www.springframework.org/schema/webflow-config=org.springframework.webflow.config.WebFlowConfigNamespaceHandler
a spring.schemas
http\://www.springframework.org/schema/context/spring-context-2.5.xsd=org/springframework/context/config/spring-context-2.5.xsd
http\://www.springframework.org/schema/context/spring-context.xsd=org/springframework/context/config/spring-context-2.5.xsd
http\://www.springframework.org/schema/jee/spring-jee-2.0.xsd=org/springframework/ejb/config/spring-jee-2.0.xsd
http\://www.springframework.org/schema/jee/spring-jee-2.5.xsd=org/springframework/ejb/config/spring-jee-2.5.xsd
http\://www.springframework.org/schema/jee/spring-jee.xsd=org/springframework/ejb/config/spring-jee-2.5.xsd
http\://www.springframework.org/schema/lang/spring-lang-2.0.xsd=org/springframework/scripting/config/spring-lang-2.0.xsd
http\://www.springframework.org/schema/lang/spring-lang-2.5.xsd=org/springframework/scripting/config/spring-lang-2.5.xsd
http\://www.springframework.org/schema/lang/spring-lang.xsd=org/springframework/scripting/config/spring-lang-2.5.xsd
http\://www.springframework.org/schema/security/spring-security.xsd=org/springframework/security/config/spring-security-2.0.4.xsd
http\://www.springframework.org/schema/security/spring-security-2.0.xsd=org/springframework/security/config/spring-security-2.0.xsd
http\://www.springframework.org/schema/security/spring-security-2.0.1.xsd=org/springframework/security/config/spring-security-2.0.1.xsd
http\://www.springframework.org/schema/security/spring-security-2.0.2.xsd=org/springframework/security/config/spring-security-2.0.2.xsd
http\://www.springframework.org/schema/security/spring-security-2.0.4.xsd=org/springframework/security/config/spring-security-2.0.4.xsd
http\://www.springframework.org/schema/tx/spring-tx-2.0.xsd=org/springframework/transaction/config/spring-tx-2.0.xsd
http\://www.springframework.org/schema/tx/spring-tx-2.5.xsd=org/springframework/transaction/config/spring-tx-2.5.xsd
http\://www.springframework.org/schema/tx/spring-tx.xsd=org/springframework/transaction/config/spring-tx-2.5.xsd
http\://www.springframework.org/schema/webflow-config/spring-webflow-config-1.0.xsd=org/springframework/webflow/config/spring-webflow-config-1.0.xsd
http\://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd=org/springframework/webflow/config/spring-webflow-config-2.0.xsd
A fat jar je na svete :) :D
1 komentář:
The Return to Player is a share of all of the wagered cash that a slot pays again to its players. This implies that, the more you play, the more the mathematics works against you, and the higher the chances are of you walking out of the casino with much less cash in your wallet than whenever 1xbet korea you came in. The table beneath compiles variety of the} house edges for a number of} well-liked casino video games. Featuring 23 betting kiosks, nice food and drink specials and a giant video wall for viewing the best video games — our Barstool Sportsbook has every little thing you want for an excellent experience. From your traditional favorites to all the most recent video games with cutting-edge technology, there’s a slot machine for you. Take benefit of mychoice® promotions and different provides at River City Casino and you could win money, amazing prizes.
Okomentovat