Cum sa faci un plugin-cum ar fi arhitectura runnable?

0

Problema

Avem un cuplu de moștenire proiecte Java, pe care am convertit la Maven proiecte / module. Anterior, toate proiectele au fost NetBeans proiecte și a avut nici o dependență reală de management. Dependențe externe a existat pe companii unitate de rețea și au fost incluse direct și Borcane în NetBeans proiecte din fiecare modul. Pentru dependențe interne, proiect simplu referințe au fost folosite. A fost o durere pentru a construi totul din cauza programator avut de a construi totul în ordinea corectă.

Acum, suntem în poziția în care putem deschide toate Maven module în IntelliJ IDEA și NetBeans. Cu toate acestea, sunt probleme imaginind cel mai bun mod de a combina diferite module și dependențe externe într-un mod specific, care corespunde într-o casă plugin-ca structura. Mai ales cu NetBeans (în curs de dezvoltare, cu atât Idele trebuie să fie posibilă).

Aici este cum arhive git / structura proiectului aproximativ pare. Dosarul structura modulelor este implicit Maven structura pentru fiecare modul. Lista caracteristică a acestui site a fost prea stângace, așa că am inclus-o ca screenshot...

Structure Git Repos

Avem un intern maven depozit pentru lucruri și construirea cu maven etc. este de lucru. Pentru Intellij IDEA pot rula și depanare produsul final pentru clientului1 printr-un termen personalizate de configurare, care copiază fișierele necesare în structura de care au nevoie:

enter image description here

Cu IntelliJ IDEA, pot depanare software-ul, dar cred că abordarea (personalizat IntelliJ rula config-am creat, arătând spre toate necesare Borcane și fișiere direct) este destul de urât, și pentru NetBeans nu am putut găsi un anunț similar "rula de configurare" mecanism.

Așa că am încercat pentru a realiza acest proces de a construi, prin crearea unui nou "Customer1Runnable" proiect Maven ca un fel de a construi descriere, care subliniază toate necesare Maven module. Bazat pe acest lucru, am crezut că am putea obține și automatism pentru a crea software-ul necesar structură. Ergo copia toate modulele într-un folder plugin și toate dependențele dintre module într-un lib folder în interiorul Customer1Runnable proiect, folosind maven-montaj-plug.

În primul rând, îmi este corectă presupunerea că acesta este un posibil caz de utilizare pentru maven-asamblare-plugin?

Proiectul în sine nu au nici o sursă fișiere, aceasta este doar o pom.xml și assembly-config.xml descriptor. Am atașat de asamblare-plugin pentru pachetul de fază. Atunci când rulează mvn package comanda toate modulele conectate sunt construite, dar pentru executarea de montaj-plug-am obține următorul rezultat:

Windows CMD output of Customer1Runnable maven project

Pentru început, am încercat doar să includă un modul în adunarea descriptor. Aceasta este XML (opicom-assembly.xml) pentru că:

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

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

Pom de un modul se pare ca acest lucru:

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

Multumesc pentru orice intrare pe ce fac gresit aici / cum de a realiza acest lucru cu Maven.

EDIT: Așa cum sa cerut, aici un exemplu de proiect ca Fișier ZIP. https://drive.google.com/drive/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k?usp=sharing Părintele directoare ModuleGroupCustomer și ModuleGroupCommon reprezintă arhive git în scenariu real. Relativă module cale este cauzată, pentru că proiectul maven, care ar trebui să-mi fie "run config" puncte de la maven proiecte în ambele depozite.

Poate sunt neînțelegere Maven, în general? M-am gândit în termeni de cazuri de utilizare pentru dependența de management similare .Net pachete nuget, dar, de asemenea, ca "proiect de configurare" ca de obicei NetBeans/Intellij proiecte.

Este mai bine să rămânem pur și simplu existente NetBeans proiecte pentru o zi la zi de dezvoltare?

1

Cel mai bun răspuns

0

După o lungă și obositoare proces de încercare și eroare, am găsit o soluție care este de lucru pentru mine. Așa că am decis să împărtășesc soluție on-line, în cazul în care altcineva se execută într-o problemă similară. Aici este un link la final arhivă zip care conțin exemplu de lucru proiecte => File CustomerRunnable_RunningAssemblyPluginStackoverflowExample.zip https://drive.google.com/drive/u/0/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k

Greșeala mea a fost că nu am înțeles cum de asamblare-plugin-ul funcționează. Abordarea pe care am executat plugin-ul în interiorul meu agregator de pom (CustommerRunnable) este greșită, deoarece acest proiect maven există doar ca părinte pom.

La CustommerRunnable pom.xml toate referințele clienților plugin-uri și module. Aceste module nu au CustommerRunnable ca părinte, dar un alt pom. Apoi mi-am creat-o separat maven proiectului "distribuția". La pom.xml de distribuție definește toate plugin-urile (necesare clientului maven module) ca dependențe. Ea are, de asemenea, CustommerRunnable pom.xml ca părinte. Prin urmare, atunci când am rula proiectului în NetBeans, toate modulele conectate sunt, de asemenea, de a construi(dacă este necesar).

De asemenea, configurează ansamblul plugin. Ansamblul plugin-ul este atașat la pachet maven-fază și, astfel, executat cu ea. Se utilizează, de asemenea, un obicei de asamblare descriptor, care copiază toate definite anterior plugin-uri în dosare. Acest lucru este realizat prin utilizarea dependencySets cu includă și să excludă modele. Vezi https://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html pentru detalii cu privire la acest lucru. Astfel, unul dependencySet copiază toate fișierele jar de toate plugin-uri de o /folder plugin prin utilizarea unui includ model. Atunci această abordare este inversat pentru a copia fișierele jar de toate dependențe externe a o /lib folder.

Descriptorul definește, de asemenea, unele fișiere suplimentare pentru a copia la o anumită locație. exec-maven-plugin-ul, așa că am poate de confortabil începe client software de NetBeans. N-am încă de a gestiona pentru a configura plugin executa corect în ceea ce privește necesare classpath argumente.

Endresult pare ca acest lucru: Assembly folder after building

De asemenea, este de remarcat faptul că configurații ale "proiectului Construi", "a Alerga proiect" și "Debug proiect" în interiorul NetBeans nevoie de un pic de modificare. (Click dreapta pe Modulul de "distribuție" -> "Properties" -> punctul "Acțiuni"

2021-11-25 17:07:28

În alte limbi

Această pagină este în alte limbi

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