Ako urobiť plugin-ako architektúra runnable?

0

Otázka

Máme pár legacy Java projektov, ktoré sme prevedené na Maven projects / modules. Predtým, všetky projekty boli NetBeans projektov a mali žiadny skutočný riadenie závislostí. Závislosti existovala na spoločnosti sieťovú jednotku a boli priamo uvedené ako Pohárov v NetBeans projekty z každého modulu. Na vnútorných závislostí, jednoduchý projekt odkazy boli použité. To bola bolesť vybudovať všetko, pretože programátor musel stavať všetko v správnom poradí.

Teraz, sme v pozícii, že sme mohli otvoriť všetky Maven moduly v IntelliJ IDEA a NetBeans. Avšak, mám problém zistiť, najlepší spôsob, ako kombinovať rôzne moduly a externých závislostí špecifickým spôsobom, ktorý zodpovedá v-dom plugin-ako štruktúru. Najmä s NetBeans (rozvoj s oboma IDEs musí byť možné).

Tu je, ako repozitáre git / projekt štruktúra zhruba vyzerá. Štruktúru priečinkov modulov je predvolené Maven štruktúru pre každý modul. Zoznam extra tejto stránky bol príliš nemotorná, tak som ho zaradili ako film...

Structure Git Repos

Máme vnútorný maven repository pre veci a budovy s maven atď. pracuje. Pre Intellij IDEA môžem spustiť a ladenie konečný produkt pre customer1 cez vlastné spustite konfiguráciu, ktorá skopíruje potrebné súbory v potrebnej štruktúre:

enter image description here

S IntelliJ IDEA, môžem ladenia softvéru, ale myslím si, že prístup (vlastné IntelliJ spustiť config, ktorý som vytvoril, ukážte na položku všetky potrebné Pohárov a súbory priamo) je pomerne škaredé, a pre NetBeans som nemohol nájsť podobné "spustiť konfiguračný" mechanizmus.

A tak som sa snažil dosiahnuť to stavať proces vytvorením nového "Customer1Runnable" Maven projekt ako druh stavať popis, ktorý poukazuje na všetky potrebné Maven moduly. Na základe tohto, som veril, že by som mohol dosiahnuť, a automatism vytvoriť potrebný softvér štruktúry. Ergo kopírovať všetky moduly do plugin zložky a všetkých závislostí moduly do lib priečinok vo vnútri Customer1Runnable projektu, cez maven-montáž-plugin.

Po prvé, je môj predpoklad správny, že je to možné použiť prípade maven-montáž-plugin?

Samotný projekt nemá žiadne zdrojové súbory, to je len pom.xml a assembly-config.xml deskriptor. Som pripojený montáž-plugin balík fázy. Pri behu mvn package príkaz všetky pripojené moduly sú postavené, ale pre vykonanie montáže-plugin mám nasledovný výstup:

Windows CMD output of Customer1Runnable maven project

Pre začiatok, len som sa snažil zahrnúť jeden modul na montáž deskriptor. Toto je XML (opicom-assembly.xml) za to:

<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 z Customer1Runnable projektu

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

V pom modulu vyzerá takto:

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

Vďaka za každú vstup na to, čo robím zle a ako to dosiahnuť s Maven.

ÚPRAVA: Ako sa požaduje, tu príklad projektu, ako ZIP-Súboru. https://drive.google.com/drive/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k?usp=sharing Materská adresáre ModuleGroupCustomer a ModuleGroupCommon robiť predstavujú git úloţísk v reálnom scenári. Relatívna modul cesta je spôsobené, pretože maven projekt, ktorý by mal byť môj "spustiť config" body " maven projektov v obidvoch úloţísk.

Možno som nedorozumenia Maven vo všeobecnosti? Myslel som, že, pokiaľ ide o prípady použitia pre riadenie závislostí podobné .Čistý nuget balíčkov, ale aj ako "projekt konfigurácia" ako obyčajné NetBeans/Intellij projektov.

Je lepšie jednoducho nalepiť na existujúce NetBeans projektov pre každodenné rozvoja?

1

Najlepšiu odpoveď

0

Po dlhej a zdĺhavý proces pokusov a omylov, ktoré som našiel riešenie, ktoré je pre mňa pracovať. Tak som sa rozhodol podeliť na riešenie on-line, v prípade, že niekto beží do podobný problém. Tu je odkaz na konečné zip archív obsahujúci pracovné príklade projekty => Súbor CustomerRunnable_RunningAssemblyPluginStackoverflowExample.zip https://drive.google.com/drive/u/0/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k

Moja chyba bola, že som nepochopil, ako montáž-plugin funguje. Prístup, ktorý som vykonal plugin vnútri mojej agregátor pom (CustommerRunnable) je zle, ako to maven projekt existuje len ako rodič pom.

Na CustommerRunnable pom.xml odkazy všetky zákaznícke pluginy ako moduly. Tieto moduly nemajú CustommerRunnable ako rodič, ale rôzne pom. Potom som vytvoril samostatný maven projekt "distribúcia". Na pom.xml distribúcie definuje všetky pluginy (potreby zákazníka maven moduly) ako závislosti. To má tiež CustommerRunnable pom.xml ako rodič. Preto, keď som spustiť projekt v NetBeans, všetky pripojené moduly sú tiež vytvoriť(ak je to potrebné).

To tiež konfiguruje montáž plugin. Montáž plugin je pripojený na maven package-fáze, a teda vykoná sa s ním. To tiež používa vlastné montáž deskriptor, ktorý skopíruje všetky predtým definované pluginy do správnych priečinkov. To sa vykonáva pomocou dependencySets s obsahovať a vylúčiť vzory. Pozri https://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html podrobnosti o tomto. Takže jeden dependencySet kópie všetkých jar súbory všetkých pluginy a /plugin priečinok pomocou include vzor. Potom tento prístup je inversed skopírujte jar súbory všetkých závislosti na /lib priečinok.

Tento deskriptor tiež definuje niektoré ďalšie súbory, ktoré chcete kopírovať na konkrétne miesto. exec-maven-plugin, tak som sa môžete pohodlne spustiť zákaznícky softvér z NetBeans. Nechcel som ešte podarí nakonfigurovať vykonanie plugin správne týkajúce potrebné classpath argumenty.

Endresult vyzerá takto: Assembly folder after building

Je tiež potrebné poznamenať, že konfigurácie "Build project", "Spustiť projekt" a "Debug projektu" vnútri NetBeans je potrebné trošičku úpravy. (Kliknite pravým tlačidlom myši Modul "distribúcia" -> "Vlastnosti" -> bod "Akcie"

2021-11-25 17:07:28

V iných jazykoch

Táto stránka je v iných jazykoch

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