čtvrtek 8. března 2012

EJB jar včetně závislostí

Potřeboval jsem vytvořit EJB jar v němž měly být obsaženy také všechny závislosti. V mém případě MyBatis a Spring Framework. Pro buildování používám maven. Do výsledného jaru samozřejmě nelze zabalit přímo další jary, je třeba je nejprv rozbalit. To vyřešil mavenovský plugin maven-dependency-plugin přidaný do pom.xml. Zajímavá je v tomto místě především jeho část execution:
 <execution>  
   <id>unpack-dependencies</id>  
   <phase>process-classes</phase>  
   <goals>  
     <goal>unpack-dependencies</goal>  
   </goals>  
   <configuration>  
     <!--Definuji co se ma rozbalit do vysledneho jaru-->  
     <includeGroupIds>org.springframework,org.mybatis</includeGroupIds>  
     <outputDirectory>${project.build.directory}/classes</outputDirectory>  
   </configuration>  
 </execution>  
Aby byly přibalené závislosti také v classpath, vypadala definice pluginu maven-ejb-plugin následovně:
 <plugin>  
   <groupId>org.apache.maven.plugins</groupId>  
   <artifactId>maven-ejb-plugin</artifactId>  
   <version>2.3</version>  
   <configuration>  
     <archive>  
       <manifest>  
         <addClasspath>true</addClasspath>  
       </manifest>  
     </archive>  
     <ejbVersion>3.1</ejbVersion>  
   </configuration>  
 </plugin>  
Výsledkem celého snažení ovšem byla nicneříkající chyba:
Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 9 in XML document from URL [file:.../META-INF/applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
Naštěstí jsem narazil na blogspot, který tento problém řeší následovně: "stačí" ze všech použitých springových jarů vybrat soubory META-INF/spring.handlers a META-INF/spring.schemas a sloučit je pouze do dvou. Tyto dva dát do adresáře META-INF a celé to zabalit do jaru. Výsledný jar, pak umístit do lib aplikačního serveru. V případě použití novější verze springu může být třeba tyto soubory doeditovat.

Žádné komentáře:

Okomentovat