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