Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Jan Vodolan 22. 06. 2010, 14:05:26
-
Dobrý den / ahoj,
NetBeans (ant) my vytvoří z EJB projektu JAR tak, že v rootu JARu jsou závislosti. Maven mi ale tyto zavislosti do EJB jaru nepřipojí. Netušíte prosím kde mám chybu? Už jsem přečetl snad všechny manuály a návody a nic. Pro WAR projekty to funguje a závislosti se přihodí do META-INF/lib ale pro EJB project ne ))-: Díky moc za nasměrování ...
Tzn. potřeboval bych poradit jak v Mavenu dostat do EJB balíčku jary externích závislostí...
ejb-package.jar:- zavislost1.jar
- zavislost2.jar
- com/firma/*.class
- META-INF/MANIFEST.MF, ...
Můj pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.firma</groupId>
<artifactId>ejb-package</artifactId>
<packaging>ejb</packaging>
<version>1.0-SNAPSHOT</version>
<scm>
<connection>scm:svn:https://firma/trunk/ejb-package/src</connection>
</scm>
<build>
<sourceDirectory>target/checkout/java</sourceDirectory>
<resources>
<resource>
<directory>target/checkout/conf</directory>
<targetPath>META-INF</targetPath>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<ejbVersion>3.0</ejbVersion>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.firma</groupId>
<artifactId>zavislost1</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.firma</groupId>
<artifactId>zavislost2</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
používám: Maven2.2.1, J2EE5, EJB3.0
-
Co zmenit scope na runtime?
-
to jsem zkoušel (nehledě na to že to není to co chci, potřebuji je i pro compile)...
-
a nestaci je mit v MANIFEST.MF a pak nekde v CLASSPATH?
nechcete spis generovat EAR?
-
EAR je zapovězen ))-: (nařízení zhora)
no a v MANIFEST.MF mám
Class-Path: javaee-5.0.jar zavislost1.jar zavislost2.jar
a zavislostX.jar jsou výsledky jiných Maven projektů které se úspěšně přeložili a nainstalovaly (do local maven repository) ... tak předpokládám, že jsou na classpath... (no radši zkusim ověřit)
-
no pro jistotu jsem to zkusil a nepovedlo se ))-:
nějaké další nápady ?
-
Zdar, ak by nepomohlo toto:
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<!-- this is false by default -->
<generateClient>true</generateClient>
</configuration>
</plugin>
</plugins>
[...]
</build>
, tak potom by so to videl na bruteforce - plugin dependency:copy-dependencies alebo assembly.. pripadne mozno nahlad do zdrojakov ejb plugina - ako to bolo zamyslane.
-
<generateClient>true</generateClient>
to je něco uplně jiného (jestli to dobře chápu) ...
dependency:copy-dependencies
... no to vypadá zajímavě... nastuduji a dám vědět
assembly
... to jsem se snažil nějak použít ale nenašel jsem jak ))-: neporadili byjste mi konkrétněji?
samozřejmě že je možnost tam ty zavislostX.jar nakopírovat ručně (nebo nějakým maven-vagonem) ale to mi příjde divný ... když používám automatický buildící systém (maven) tak proč ho obcházet ))-:
-
Plugin assembly ma niekolko defaultnych descriptorov, co je xml s predpisom, ako bude vyzerat vysledok. Pouzit vlastny descriptor sa da pomocou parametra <descriptors><descriptor>${basedir}/mojdescriptor.xml</descriptor></descriptors>.
Syntax descriptora je tu: http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html (http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html).Priklady na descriptory su tu: http://maven.apache.org/plugins/maven-assembly-plugin/examples/index.html (http://maven.apache.org/plugins/maven-assembly-plugin/examples/index.html). Pomocou files, fileSets, dependencySet sa da vyskladat vysledok (jar, gz, tar, bz2). Nie je to najpohodlnejsia cesta, ale uspokoji aj vacsinu zvrhlych zamerov.
Mozno by stalo za to, mrknut sa do zdrojakov pluginu mave-ejb-plugin, ci to tam niekde priamo v komentari nie je vysvetlene.
-
Tak tvorcovia ejb-pluginu tam zavislosti proste nepridaju:
Note: The dependencies will not be package with the EJB jar.
Takze pitvanie zdrojakov asi nic rozumne neprinesie :-|
-
super ... tohle vypadá slibně. Složitě ale slibně (-:
no a o těch zdrojácích jste již psal... škoda
-
no tak assembly plugin zabral...díky moc za nasměrování ! ((-:
Rozchodil jsem to tedy následovně:
do projektu se přidá konfigurace assembly pluginu<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>cesta/muj-ejb-descriptor.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>assembly-moje-ejb</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
a ještě jak vypadá ten muj-ejb-descriptor.xml
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>ejb-muj-descriptor-id</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<!-- Includes dependency sub-projects (with the same groupId - com.firma ) as JARs -->
<dependencySets>
<dependencySet>
<outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
<useTransitiveDependencies>false</useTransitiveDependencies>
<unpack>false</unpack>
<includes>
<include>${project.groupId}:*</include>
</includes>
<excludes>
<exclude>${project.groupId}:${project.artifactId}</exclude>
</excludes>
</dependencySet>
</dependencySets>
<!-- Includes compiled project's classes -->
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory></outputDirectory>
</fileSet>
</fileSets>
</assembly>