Jestem obecnie w trakcie konwersji dużego projektu wielomodułowego (~ 100 podmodułów) do korzystania z Maven. Obecnie używamy Ant + Ivy.Inteligentniejsza obsługa zależności Native z Maven
tej pory bez większych problemów zostały przycięte i jestem wygodny, że Maven jest nadal dobrym rozwiązaniem. Zastanawiam się jednak, czy istnieje lepszy sposób na radzenie sobie z natywnymi zależnościami.
dotąd doszedłem do następujących wniosków.
- Najlepiej jest zainstalować każdą natywną zależność w repozytorium maven jako autonomiczną bibliotekę lub zarchiwizowany pakiet zawierający wiele zależności.
Zamiast zgubić się w oświadczając każdy zależność z wtyczką zależności Maven, zdecydowałem się dać każdy klasyfikator (np tubylcy Win32) i używać następujących w POM dominującej:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>copy</id> <phase>compile</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <includeScope>runtime</includeScope> <includeClassifiers>natives-win32</includeClassifiers> <outputDirectory>${project.build.directory}/natives</outputDirectory> </configuration> </execution> </executions> </plugin>
Do tej pory wydaje się to być prostym i wszechstronnym rozwiązaniem, które nie wymaga zbytniego dodawania nowych zależności natywnych. Oferuje mi również proste i wszechstronne rozwiązanie do zarządzania tubylcami. Jedyne, co muszę zrobić, to upewnić się, że mój katalog// native/jest zdefiniowany w java.library.path.
Jedna rzecz, która mnie denerwuje (trochę) na temat tego podejścia jest to, że wszystkie moje rodzime zależności kopiowane wokół każdej podmodułem wyrażającej zależność przechodni na nich, podczas gdy moje szczęśliwe biblioteki jar są dodawane do ścieżki klasy odwołuje się do gdzie znajdują się w moim lokalnym repozytorium (kopia nie jest wymagana).
Nie ma sposobu, aby być mądrzejszym o tym i mieć odniesionych moich rodowisk z ich lokalizacji repozytorium (zakładając, że nie mam ich zarchiwizowane, czyli dll). To zaoszczędziłoby sporo niepotrzebnego kopiowania.
Czy są jakieś inne potencjalnych pułapek, że powinienem być zaniepokojony z powyższym podejściem?
Jak rozwiązałeś to przez Ivy? Sposób, w jaki to opisałeś? – khmarbaise
Wygląda na to, że rozwiązano go dość słabo dzięki naszym konfiguracjom Ivy. Po pierwsze, konfiguracje debugowania/uruchamiania dla środowiska Eclipse konfigurują zależności środowiska wykonawczego, odwołując się do każdego z nich we współużytkowanym repozytorium, które jest zmapowanym katalogiem na każdym komputerze programisty. Po wdrożeniu lub przetestowaniu skrypty mrówek przejmują i przesuwają zależności zależnie od potrzeb. To jest niezły bałagan. – S73417H
Hmmm, podoba mi się twoje rozwiązanie.Wydaje się, że to, czego naprawdę chcesz, jest dodatkowym celem wtyczki zależności, która ustawia właściwość jako listę ścieżek rozwiązanych zależności. To byłby ostatni element układanki. Powinno być łatwe, dlaczego nie wziąć noża na łatkę? Ping mi, jeśli uda ci się napisać taką łatkę, a ja przyjrzę się jej zastosowaniu. –