středa 3. června 2009

FatJar s maven assembly pro Spring aplikaci

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.
  1. 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.
  2. 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

3 komentáře:

Anonymní řekl(a)...

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.

8fbgs2sqh3 řekl(a)...

One of the significant advantages of numerous thermoplastic resins is their unimaginable stability and reliability. Most elements formed through injection molding will final indefinitely, though those in functional roles producing put on and tear will eventually reach a point of failure. However, keep in mind that|do not forget that} these plastics characteristic prominently in high-intensity environments such as the automotive and aerospace industries. If a plastic formed from a mildew is robust enough to fly to area or hold airline passengers secure at forty,000 feet, it’s robust enough for your corporation, too. In addition, injection molding usually makes use of a plunger to pressure the toilet flusher arm melted plastic into the mildew as shown in the picture below, whereas extrusion depends on gravity to feed the plastic into the mildew.

ub4ccic1yn řekl(a)...

Sometimes a no deposit bonus is just a bunch of low-value free spins on a penny slot. You’ll have to be extremely fortunate to make quite a lot of} bucks from such 1xbet a deal. This bonus is a dream to all gambling fanatics and a majority of them look for a casino web site that provides sort of|this type of|this sort of} benefit. A month-to-month bonus is obtainable by a casino web site on a month-to-month foundation, per occasion or necessary holiday such as Thanksgiving Day or Christmas Day in the type of a free spin as a reward. This is an unique bonus that is given to purchasers who make huge deposits and are loyal to the casino. They were given awesome rewards such as free gadgets, discounted travel, or free eating in an unique restaurant.