Estoy desarrollando un cliente de correo electrónico OSGI con Maven siguiendo la ingeniería de software basada en componentes. Debo asegurarme de que las dependencias entre todos mis componentes se resuelvan dentro del contenedor OSGI, por lo que no puedo copiar las dependencias dentro de los JAR generados, de lo contrario no tendría sentido usar OSGI. Pero hay una dependencia que realmente tengo que copiar dentro del JAR, es javax.mail, porque no puedo encontrar ningún paquete compatible con OSGI que envíe correos electrónicos.

Para hacerlo, he visto esta página: https: //maven.apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html

Así que edité mi pom.xml:

<project>
    ...
    <build>
        <plugins>
            <plugin> <!-- to edit the MANIFEST.MF, required for OSGI -->
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>4.2.1</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Class-Path>lib/</Class-Path>
                        ... OSGI instructions ...
                    </instructions>
                </configuration>
            </plugin>
            <plugin> <!-- to copy the dependencies -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>com.sun.mail</groupId>
                                    <artifactId>javax.mail</artifactId>
                                    <version>1.6.2</version>
                                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    ...
</project>

Pero la etiqueta <artifactItems> no parece funcionar. Cuando yo mvn install, copia TODAS las dependencias en una carpeta dependency/ y no en una carpeta lib/. ¿Cómo puedo hacer para copiar solo el JAR javax.mail en una carpeta llamada lib/?

Gracias por su ayuda.

1
JacopoStanchi 23 abr. 2020 a las 01:18

2 respuestas

La mejor respuesta

El complemento maven-bundle permite incrustar dependencias: https://felix.apache.org/ documentación / subproyectos / apache-felix-maven-bundle-plugin-bnd.html

<Embed-Dependency>javax.mail|javax.mail-api</Embed-Dependency>

1
Christian Schneider 24 abr. 2020 a las 12:13

Mezcló los objetivos copy-dependencies y copy. Reemplace copy-dependencies por copy.

http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html

1
JF Meier 23 abr. 2020 a las 06:32