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