Cómo hacer un plugin-como la arquitectura ejecutable?

0

Pregunta

Tenemos un par de legado proyectos Java, que nos convierte a proyectos Maven / módulos. Previamente, todos los proyectos fueron proyectos de NetBeans y no tenía verdadera gestión de la dependencia. Dependencias externas existía en las empresas unidad de red y fueron directamente como Frascos en los proyectos de NetBeans de cada módulo. Para las dependencias internas, simples referencias del proyecto fueron utilizados. Era un dolor para construir todo porque el programador tenía que construir todo en el orden correcto.

Ahora, estamos en la posición en la que podemos abrir todas las Maven módulos en IntelliJ IDEA y NetBeans. Sin embargo, estoy teniendo problemas para averiguar la mejor manera de combinar los diferentes módulos y dependencias externas de una manera específica, que se ajusta en la casa de plugin-como la estructura. Especialmente con NetBeans (en desarrollo con ambos IDEs debe ser posible).

Aquí es cómo los repositorios git / la estructura del proyecto, aproximadamente se parece. La estructura de la carpeta de los módulos es el valor predeterminado de Maven de la estructura de cada módulo. La función de lista de este sitio era demasiado torpe, así que lo incluye como captura de pantalla...

Structure Git Repos

Tenemos una interna repositorio de maven para la materia y de la construcción con maven, etc. está trabajando. Para Intellij IDEA de que me puede ejecutar y depurar el producto final para customer1 a través de una ejecución personalizada de configuración, que copia los archivos necesarios en la necesaria estructura:

enter image description here

Con IntelliJ IDEA, puedo depurar el software, pero creo que el enfoque personalizado IntelliJ ejecutar config que he creado, que apunta a que todos los necesarios Frascos y archivos directamente) es bastante feo, y para NetBeans no he podido encontrar una similar "a la configuración del" mecanismo.

Por lo que he tratado de lograr este proceso de construcción mediante la creación de un nuevo "Customer1Runnable" proyecto de Maven como una especie de descripción de la versión que apunta a que todos los necesarios Maven módulos. Basado en esto, yo creía que podía lograr y automatismo para crear la estructura del software. Ergo copia de todos los módulos en una carpeta plugin y todas las dependencias de los módulos en una carpeta lib dentro de la Customer1Runnable proyecto, utilizando maven-asamblea-plugin.

En primer lugar, es mi suposición correcta que este es un posible caso de uso para el maven-asamblea-plugin?

El proyecto en sí no tiene ninguna fuente de archivos, sólo es un pom.xml y el assembly-config.xml descriptor. Os adjunto la asamblea-plugin para el paquete de fase. Cuando se ejecuta el mvn package comando todos conectados los módulos están construidos, pero para la ejecución de la asamblea-plugin me sale el siguiente resultado:

Windows CMD output of Customer1Runnable maven project

Para empezar, sólo he tratado de incluir un módulo en la asamblea descriptor. Este es el XML (opicom-assembly.xml) para que:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
    <id>opicom-assembly</id>
    <formats>
        <format>dir</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <moduleSets>
        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>
                <includes>
                    <include>my.company.reporting:module1</include>
                </includes>
        </moduleSet>
    </moduleSets>
</assembly>

pom.xml de Customer1Runnable proyecto

 <?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <version>1.6</version>
    <groupId>my.company.customer1</groupId>
    <artifactId>OpicomRunnable</artifactId>
    <packaging>pom</packaging>
    <name>OpicomRunnable</name>
    
    <repositories>
        <repository>
            <id>Company-Maven-Repo</id>
            <url>file:\\\\MyCompany\TFSDrop\MavenRepo</url>
        </repository>
    </repositories>
    
    <modules>
        <module>../my.company.customer1.module1</module>
        <module>../my.company.customer1.module2</module>
        .
        .
        .
        <module>../../MyCompany_Common/Report/my.company.reporting.module1</module>
    </modules>  
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <descriptors>
                        <descriptor>opicom-assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

El pom de un módulo se parece a esto:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>my.company</groupId>
        <artifactId>reporting</artifactId>
        <version>1.3</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>module1</artifactId>
    <version>1.3</version>
    <packaging>jar</packaging>



    <dependencies>
        <!-- external dependencies -->
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>21.1.0.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <finalName>my-company-${project.artifactId}</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <outputDirectory>../build</outputDirectory>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Gracias por el aporte lo estoy haciendo mal aquí / ¿cómo lograr esto con Maven.

EDITAR: Conforme a lo solicitado, aquí un ejemplo de un proyecto como Archivo ZIP. https://drive.google.com/drive/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k?usp=sharing El padre directorios ModuleGroupCustomer y ModuleGroupCommon representan repositorios git en el escenario real. La relativa ruta de acceso del módulo es causado, debido a que el proyecto de maven que debería ser mi "ejecutar config" puntos a proyectos maven en ambos repositorios.

Tal vez soy yo la incomprensión de Maven en general? Yo pensaba en ella en términos de casos de uso para la gestión de la dependencia similar .Red de paquetes de nuget, pero también como "configuración del proyecto" comunes, como los de NetBeans/Intellij proyectos.

Es mejor simplemente se adhieren a la existente de proyectos de NetBeans para el día a día del desarrollo?

1

Mejor respuesta

0

Después de un largo y tedioso proceso de ensayo y error, he encontrado una solución que está trabajando para mí. Así que me decidí a compartir la solución en línea, en caso de que alguien más se encuentra con un problema similar. Aquí hay un enlace al final del archivo zip que contiene ejemplo de trabajo de proyectos => Archivo CustomerRunnable_RunningAssemblyPluginStackoverflowExample.zip https://drive.google.com/drive/u/0/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k

Mi error fue que no he entendido cómo la asamblea-plugin funciona. El método que he ejecutado el plugin dentro de mi agregador de pom (CustommerRunnable) es incorrecta, ya que este proyecto de maven sólo existe como padre pom.

El CustommerRunnable pom.xml las referencias de los clientes de plugins como módulos. Los módulos no tienen la CustommerRunnable como padre, pero una diferente pom. A continuación, he creado un proyecto de maven "distribución". El pom.xml de la distribución define todos los plugins (necesita el cliente maven módulos) como de las dependencias. También tiene la CustommerRunnable pom.xml como padre de familia. Por lo tanto, cuando yo ejecute el proyecto en NetBeans, todos los módulos conectados también a construir(si es necesario).

También se configura la asamblea plugin. La asamblea plugin está conectado a la maven paquete de fase y por lo tanto ejecutado con ella. También utiliza un ensamblado personalizado descriptor, que copia todos los previamente definidos plugins en la carpeta. Esto se hace mediante el uso de dependencySets con incluir y excluir los patrones. Ver https://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html para más detalles sobre esto. Así que uno dependencySet copias todos los archivos jar de todos los plugins a la carpeta de plugins mediante una inclusión patrón. A continuación, este enfoque es invertida para copiar los archivos jar de todas las dependencias externas a la carpeta lib.

El descriptor también define algunos archivos adicionales para copiar en una ubicación particular. exec-maven-plugin, así que cómodamente se puede iniciar el cliente de software de NetBeans. Yo no y se las arreglan para configurar la ejecución del plugin correctamente con relación al classpath de argumentos.

Endresult se parece a esto: Assembly folder after building

También vale la pena señalar que las configuraciones del "proyecto de Construir", "Ejecutar el proyecto" y "proyecto de Depuración" dentro de NetBeans necesita un poco de modificación. (A la derecha haga Clic en el Módulo de "distribución" -> "Propiedades" -> punto de "Acciones"

2021-11-25 17:07:28

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................