[SOLVED] Maven: jak přidat externí JAR do EJB balíčku?

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:
Kód: [Vybrat]
<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
« Poslední změna: 29. 06. 2010, 16:19:34 od Jan Vodolan »


jehovista

Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #1 kdy: 22. 06. 2010, 17:14:45 »
Co zmenit scope na runtime?

Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #2 kdy: 22. 06. 2010, 17:17:55 »
to jsem zkoušel (nehledě na to že to není to co chci, potřebuji je i pro compile)...

david

Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #3 kdy: 22. 06. 2010, 17:28:56 »
a nestaci je mit v MANIFEST.MF a pak nekde v CLASSPATH?
nechcete spis generovat EAR?

Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #4 kdy: 22. 06. 2010, 17:40:15 »
EAR je zapovězen ))-: (nařízení zhora)

no a v MANIFEST.MF mám
Kód: [Vybrat]
Class-Path: javaee-5.0.jar zavislost1.jar zavislost2.jara 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)


Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #5 kdy: 23. 06. 2010, 11:22:53 »
no pro jistotu jsem to zkusil a nepovedlo se ))-:
nějaké další nápady ?

soyo

Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #6 kdy: 23. 06. 2010, 15:40:14 »
Zdar, ak by nepomohlo toto:
Kód: [Vybrat]
<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.

Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #7 kdy: 23. 06. 2010, 16:08:37 »
Citace
<generateClient>true</generateClient>
to je něco uplně jiného (jestli to dobře chápu) ...

Citace
dependency:copy-dependencies
... no to vypadá zajímavě... nastuduji a dám vědět

Citace
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 ))-:

soyo

Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #8 kdy: 23. 06. 2010, 17:01:04 »
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.Priklady na descriptory su tu: 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.

soyo

Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #9 kdy: 23. 06. 2010, 17:04:44 »
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 :-|

Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #10 kdy: 23. 06. 2010, 17:06:34 »
super ... tohle vypadá slibně. Složitě ale slibně (-:

no a o těch zdrojácích jste již psal... škoda

Re: Maven: jak přidat externí JAR do EJB balíčku?
« Odpověď #11 kdy: 29. 06. 2010, 16:19:14 »
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
Kód: [Vybrat]
<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
Kód: [Vybrat]
<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>