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