Mamy kilka starszych Java-projektów, które możemy przekształcać w projekty / wtyczki Maven. Wcześniej wszystkie projekty były projektami NetBeans i nie miały realnego zarządzania zależnościami. Zewnętrzne zależności istniały na dysku sieciowym firmy i zostały bezpośrednio włączone w postaci plików JAR w projekty NetBeans każdego modułu. Do wewnętrznych zależności wykorzystywano proste linki na projekty. Bolało tworzyć wszystko, dlatego, że programista powinien tworzyć wszystko w odpowiedniej kolejności.
Teraz możemy otworzyć wszystkie moduły Maven w IntelliJ IDEA i NetBeans. Jednak mam problem ze znalezieniem najlepszego sposobu łączenia różnych modułów i zewnętrznych zależności, w określony sposób, co odpowiada wewnętrznej strukturze, takiej wtyczki. Szczególnie z NetBeans (opracowanie z wykorzystaniem obu IDE musi być możliwe).
Oto jak mniej więcej wygląda struktura repozytoriów / projektów git. Struktura folderów modułów jest strukturą Maven domyślnie dla każdego modułu. Funkcja listy w tym miejscu była zbyt niezdarny, dlatego podaję ją jako ekranu...
Mamy wewnętrzne repozytorium maven dla materiałów i praca z maven, itp. Działa. Dla Intellij IDEA mogę uruchamiać i debugować produkt końcowy dla customer1 za pomocą niestandardowej konfiguracji, uruchomienia, która kopiuje odpowiednie pliki w odpowiednie struktury:
Z pomocą IntelliJ IDEA mogę debugować oprogramowanie, ale myślę, że podejście (utworzona mną niestandardowa konfiguracja uruchamiania IntelliJ, wskazujący bezpośrednio na wszystkie niezbędne banki i pliki) dość brzydki, i dla NetBeans nie udało mi się znaleźć podobny mechanizm uruchamiania konfiguracji".
Dlatego próbowałem wykonać ten proces montażu, tworząc nowy projekt Maven "Customer1Runnable" jako swego rodzaju złożenia opisu, który określa wszystkie niezbędne wtyczki Maven. W związku z tym pomyślałem, że mogę osiągnąć i automatyzmu w tworzeniu niezbędnej struktury oprogramowania. Dlatego, skopiuj wszystkie moduły do folderu plugins i wszystkie zależności modułów w katalogu lib w ramach projektu Customer1Runnable za pomocą wtyczki maven-assembly.
Po pierwsze, czy moje przypuszczenie, że to możliwy wariant użycia wtyczki maven-assembly-plugin?
W samym projekcie nie ma żadnych plików źródłowych, to tylko pom.xml i w assembly-config.xml dojście. Dołączony plugin-złożenie do fazy pakietu. Po uruchomieniu mvn package
zespół wszystkie podłączone moduły zbudowane, ale do wykonania montażu-wtyczki otrzymuję następujący wniosek:
Na początku próbowałem włączyć w dojście do złożenia tylko jeden moduł. To 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 projektu realizowanego przez zamawiającego 1
<?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 modułu wygląda następująco:
<?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>
Dziękuję za każdy wkład w to, co ja tutaj robię źle / jak to osiągnąć za pomocą Maven.
ZMIANY: Jak i zażądano, oto przykład projektu w postaci pliku ZIP. https://drive.google.com/drive/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k?usp=sharing Katalogi nadrzędne ModuleGroupCustomer i ModuleGroupCommon naprawdę reprezentują repozytorium git w realnym scenariuszu. Względna ścieżka do modułu spowodowane tym, że projekt maven, który powinien być moim "konfiguracją uruchamiania", wskazuje na projekty maven w obu repozytoriach.
Może być, ja rozumiem, Maven w ogóle? Myślałem o tym z punktu widzenia możliwości wykorzystania do zarządzania zależnościami, podobnych .Pakiety Net nuget, ale także jako "konfiguracja projektu", jak zwykłe projekty NetBeans/Intellij.
Czy nie lepiej po prostu trzymać się istniejących projektów NetBeans do codziennego rozwoju?