Jak udělat plugin-jako architektura runnable?

0

Otázka

Máme pár starších Java projekty, které jsme převeden na Maven projekty / moduly. Dříve, všechny projekty byly projekty NetBeans a neměl žádné skutečné závislosti. Externí závislosti existovaly na společnosti síťovou jednotku a jsou přímo zahrnuty jako Sklenice v NetBeans projekty z každého modulu. Pro vnitřní závislosti, jednoduchý projekt odkazy byly použity. To byla bolest stavět vše, protože programátor musel postavit všechno, co ve správném pořadí.

Teď jsme v pozici, že můžeme otevřít všechny Maven modulů v IntelliJ IDEA a NetBeans. Nicméně, mám problém přijít na to, nejlepší způsob, jak kombinovat různé moduly a externí závislosti specifickým způsobem, který odpovídá údajům v domě plugin-jako struktura. Zejména s NetBeans (rozvoj jak s Ide, musí být možné).

Zde je, jak git repozitáře / struktura projektu zhruba vypadá. Složky struktury modulů je výchozí struktura Maven pro každý modul. Seznam funkce tohoto webu byl příliš nemotorný, takže jsem ji zařadil jako screenshot...

Structure Git Repos

Máme vnitřní maven úložiště pro věci a budovy s maven atd. je pracovní. Pro Intellij IDEA můžu spustit a ladění end produkt pro customer1 přes vlastní spuštění a konfiguraci, která zkopíruje potřebné soubory v potřebné struktuře:

enter image description here

S IntelliJ IDEA, můžu ladit software, ale myslím si, že přístup (vlastní IntelliJ spustit config jsem vytvořil, ukázal na všechny potřebné Sklenic a soubory přímo) je spíše ošklivý, a pro NetBeans jsem nemohl najít podobný "spustit konfiguraci" mechanismus.

Tak jsem se snažil dosáhnout tohoto procesu sestavení vytvořením nové "Customer1Runnable" Maven projekt jako jakési vytvořit popis, který ukazuje všechny potřebné Maven modulů. Na základě tohoto, jsem věřil, že bych mohl dosáhnout a automatismus vytvořit potřebné softwarové struktury. Ergo zkopírujte všechny moduly do plugin adresáře a všech závislostí modulů do lib složky uvnitř Customer1Runnable projektu pomocí maven-montáž-plugin.

Za prvé, je můj předpoklad správný, že to je možné použít pouzdro pro maven-montáž-plugin?

Projekt sám o sobě nemá žádné zdrojové soubory, to je jen pom.xml a assembly-config.xml deskriptor. Jsem připojen sestavy-plugin do balíčku fáze. Při spuštění mvn package příkaz všechny připojené moduly jsou postaveny, ale za provedení sestavy-plugin jsem si následující výstup:

Windows CMD output of Customer1Runnable maven project

Pro začátek, jen jsem se snažil zahrnout jeden modul v sestavení deskriptoru. Toto je XML (opicom-assembly.xml):

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

Pom modulu vypadá 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>

Díky za jakýkoliv vstup na to, co dělám špatně / jak toho dosáhnout s Maven.

EDIT: Jak bylo požadováno, zde příklad projektu jako ZIP-Souboru. https://drive.google.com/drive/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k?usp=sharing Nadřazené adresáře ModuleGroupCustomer a ModuleGroupCommon představují git repozitáře v reálném scénáři. Relativní modul cesta je způsobeno, protože maven projekt, který by měl být můj "spustit config" body pro maven projekty v obou repozitářů.

Možná, že jsem nedorozumění Maven obecně? Myslel jsem, že to, pokud jde o případy užití pro správu závislostí podobné .Net nuget balíčky, ale také jako "nastavení projektu", jako obyčejné NetBeans/Intellij projektů.

Je lepší prostě držet na stávající projekty NetBeans pro každodenní rozvoj?

1

Nejlepší odpověď

0

Po dlouhé a únavné proces pokusů a omylů, jsem našel řešení, které funguje pro mě. Tak jsem se rozhodl podělit se o řešení on-line, v případě, že někdo narazí na podobný problém. Tady je odkaz na konečné zip archiv obsahující funkční příklad projektů => Soubor CustomerRunnable_RunningAssemblyPluginStackoverflowExample.zip https://drive.google.com/drive/u/0/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k

Moje chyba byla, že jsem nepochopil, jak montáž-plugin funguje. Přístup, který jsem provedl plugin uvnitř mé agregátor pom (CustommerRunnable) je špatně, protože to maven projekt existuje pouze jako parent pom.

Na CustommerRunnable pom.xml odkazy všech zákazníků pluginy jako moduly. Tyto moduly nemají CustommerRunnable jako rodič, ale jiné pom. Pak jsem vytvořil samostatnou maven projektu "distribuce". Na pom.xml rozdělení definuje všechny pluginy (potřeby zákazníků maven modulů) jako závislosti. To také má CustommerRunnable pom.xml jako rodič. Proto, když jsem spuštění projektu v NetBeans, všechny připojené moduly jsou také postavit(pokud je to nutné).

To také konfiguruje shromáždění plugin. Sestava plugin je připojen k maven balení-fáze a tak popraven. To také používá vlastní assembly descriptor, který kopíruje všechny dříve definované pluginy do správné složky. To se provádí pomocí dependencySets se zahrnout a vyloučit vzory. Vidět https://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html pro informace o této. Takže jeden dependencySet zkopíruje všechny soubory jar všech plugins /plugin složky pomocí zahrnovat vzor. Pak tento přístup je obrácená do zkopírujte soubory jar všech vnějších závislostí na /lib složky.

Deskriptor definuje také některé další soubory, které chcete zkopírovat na konkrétní místo. exec-maven-plugin, takže můžu pohodlně spustit software zákazníka z NetBeans. Nevěděl jsem, přesto se podaří nakonfigurovat spustit plugin správně, pokud jde o potřebné classpath argumenty.

Endresult vypadá takto: Assembly folder after building

Je to také stojí za zmínku, že konfigurace "Vytvořit projekt", "Run project" a "Debug projektu" uvnitř NetBeans je třeba trochu změny. (Klikněte pravým tlačítkem myši Modul "distribuce" -> "Vlastnosti" - > "Akce"

2021-11-25 17:07:28

V jiných jazycích

Tato stránka je v jiných jazycích

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