Come fare un plugin architettura praticabile?

0

Domanda

Abbiamo un paio di legacy Java progetti, che abbiamo convertito a Maven progetti / moduli. In precedenza, tutti i progetti sono stati NetBeans progetti e non aveva una vera dipendenza di gestione. Dipendenze esterne esisteva la rete di imprese di auto e sono state inserite direttamente come Vasetti in NetBeans progetti di ogni modulo. Per le dipendenze interne, semplici riferimenti del progetto sono stati utilizzati. È stato un dolore per creare di tutto, perché il programmatore dovuto costruire tutto nel giusto ordine.

Ora, siamo nella posizione che siamo in grado di aprire tutti i Maven moduli di IntelliJ IDEA e NetBeans. Tuttavia, sto avendo difficoltà a capire il modo migliore per combinare i diversi moduli e dipendenze esterne, in modo specifico, che è conforme a in-casa plugin-come la struttura. Soprattutto con NetBeans (in via di sviluppo con entrambi Ide deve essere possibile).

Ecco come il repository git / struttura di progetto di circa assomiglia. La struttura delle cartelle dei moduli è l'impostazione predefinita di Maven struttura per ogni modulo. Elenco funzionalità di questo sito era troppo goffo, così l'ho inserito come screenshot...

Structure Git Repos

Abbiamo un interno repository maven per la roba e la costruzione con maven, etc. sta lavorando. Per Intellij IDEA che mi può eseguire e il debug del prodotto finale per customer1 via personalizzato esecuzione di configurazione, che copia i file necessari nella struttura:

enter image description here

Con IntelliJ IDEA, posso eseguire il debug del software, ma penso che l'approccio personalizzato, IntelliJ eseguire config che ho creato, che punta a bisogno di tutti i Vasi e i file direttamente) è piuttosto brutto, e per NetBeans non sono riuscito a trovare un simile "eseguire la configurazione" meccanismo.

Così ho provato a realizzare questo processo di costruzione, con la creazione di un nuovo "Customer1Runnable" progetto Maven come una sorta di descrizione build, che punti a tutti i necessari Maven moduli. Sulla base di questo, ho creduto di raggiungere e automatismi per creare la necessaria struttura del software. Ergo copia di tutti i moduli in una cartella plugin e tutte le dipendenze dei moduli in una cartella lib all'interno del Customer1Runnable progetto, utilizzando maven-assemblea-plugin.

Prima di tutto, è la mia ipotesi corretto che questo è un possibile caso di utilizzo di maven-assemblea-plugin?

Il progetto in sé non ha alcuna file di origine, è solo un pom.xml e il assembly-config.xml descrittore. Ho attaccato l'assemblea-plugin per il pacchetto di fase. Quando si esegue il mvn package comando connessi tutti i moduli sono costruiti, ma per l'esecuzione del montaggio-plugin ottengo il seguente output:

Windows CMD output of Customer1Runnable maven project

Per cominciare, ho solo cercato di includere un modulo in assemblea descrittore. Questo è l'XML (opicom-assembly.xml) per:

<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 di Customer1Runnable progetto

 <?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>

Il pom di un modulo simile a questo:

<?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>

Grazie per l'eventuale ingresso su quello che sto facendo di sbagliato qui / come raggiungere questo Maven.

EDIT: Come richiesto, ecco un esempio di progetto come File ZIP. https://drive.google.com/drive/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k?usp=sharing La directory padre ModuleGroupCustomer e ModuleGroupCommon rappresentano repository git nello scenario reale. Il modulo relativo percorso è causato, perché il progetto maven, che dovrebbe essere il mio "esegui config" punti di progetti maven in entrambi i repository.

Forse sto fraintendendo Maven in generale? Ho pensato in termini di casi d'uso per la gestione delle dipendenze simile .Net pacchetti nuget, ma anche come "configurazione di progetto" comune NetBeans/Intellij progetti.

È meglio attaccare semplicemente esistente NetBeans progetti di sviluppo?

1

Migliore risposta

0

Dopo un lungo e noioso processo di tentativi ed errori, ho trovato una soluzione che funziona per me. Così ho deciso di condividere la soluzione on-line, nel caso in cui qualcun altro si imbatte in un problema simile. Ecco un link per la finale di archivio zip contenente esempio progetti => File CustomerRunnable_RunningAssemblyPluginStackoverflowExample.zip https://drive.google.com/drive/u/0/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k

Il mio errore è stato che ho frainteso come l'assemblea-plugin funziona. L'approccio che ho eseguito il plugin all'interno del mio aggregatore di pom (CustommerRunnable) è sbagliato, in quanto questo progetto maven esiste solo come genitore pom.

Il CustommerRunnable pom.xml i riferimenti di tutti i clienti plugin, moduli. Tali moduli non sono il CustommerRunnable come genitore, ma un diverso pom. Poi ho creato un apposito progetto maven "distribuzione". Il pom.xml di distribuzione definisce tutti i plugin necessari cliente maven moduli) come dipendenze. Essa ha anche la CustommerRunnable pom.xml come genitore. Quindi, quando ho eseguito il progetto in NetBeans, tutti collegati i moduli sono anche costruire(se necessario).

Si configura anche l'assemblea plugin. L'assemblea plugin è collegato al maven pacchetto di fase e, quindi, eseguito con esso. Inoltre, utilizza un assembly personalizzato descrittore, che copia tutti definiti in precedenza plugin nelle giuste cartelle. Questo viene fatto utilizzando dependencySets con includere ed escludere i motivi. Vedere https://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html per ulteriori dettagli su questo. Così uno dependencySet copia tutti i file jar di tutti i plugin per un /cartella plugin utilizzando un modello. Quindi questo approccio è inversa per copiare il file jar di tutte le dipendenze esterne di una cartella /lib.

Il descrittore definisce anche alcuni file supplementari per la copia in una posizione particolare. exec-maven-plugin, quindi posso comodamente avviare il software del cliente di NetBeans. Io ancora non riescono a configurare l'esecuzione di plugin correttamente per quanto riguarda il necessario percorso di classe di argomenti.

Endresult assomiglia a questo: Assembly folder after building

Vale anche la pena notare che le configurazioni del "progetto di costruzione", "progetto" e "Debug del progetto" all'interno di NetBeans bisogno di un po ' di modifiche. (Clic destro del Modulo di "distribuzione" -> "Proprietà" -> punto di "Azioni"

2021-11-25 17:07:28

In altre lingue

Questa pagina è in altre lingue

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