Mam plik JAR w moim projekcie na Androida i chcę, aby został dodany do końcowego pliku APK. Dobra, zaczynam:
<dependency>
<groupId>com.loopj.android.http</groupId>
<artifactId>android-async-http</artifactId>
<version>1.3.2</version>
<type>jar</type>
<scope>system</scope>
<systemPath>${project.basedir}/libs/android-async-http-1.3.2.jar</systemPath>
</dependency>
Ale kiedy biegam mvn package
, otrzymuję ostrzeżenie:
[WARNING] Some problems were encountered while building the effective model for **apk:1.0
[WARNING] 'dependencies.dependency.systemPath' for com.loopj.android.http:android-async-http:jar should not point at files within the project directory, ${project.basedir}/libs/android-async-http-1.3.2.jar will be unresolvable by dependent projects @ line 36, column 25
W ostatecznym APK nie ma plików JAR.
Jak to naprawić?
Odpowiedzi:
Będziesz musiał dodać słoik do lokalnego repozytorium Maven. Alternatywnie (lepsza opcja) określ właściwe repozytorium (jeśli takie istnieje), aby mogło być automatycznie pobierane przez maven
W obu przypadkach usuń
<systemPath>
tag z zależnościźródło
maven install
na każdym komputerze, na którym chcę zbudować ten projekt (niestety nie znalazłem tego JARa w repozytoriach). Dzięki! :)Nie znam prawdziwego powodu, ale Maven zmusza programistów do zainstalowania wszystkich bibliotek (także niestandardowych) w niektórych repozytoriach Maven, więc
scope:system
nie jest lubiany. Prostym obejściem jest użyciemaven-install-plugin
postępuj zgodnie z użyciem:
zapisz swoją zależność w ten sposób
<dependency> <groupId>com.mylib</groupId> <artifactId>mylib-core</artifactId> <version>0.0.1</version> </dependency>
następnie dodaj maven-install-plugin
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> <executions> <execution> <id>install-external</id> <phase>clean</phase> <configuration> <file>${basedir}/lib/mylib-core-0.0.1.jar</file> <repositoryLayout>default</repositoryLayout> <groupId>com.mylib</groupId> <artifactId>mylib-core</artifactId> <version>0.0.1</version> <packaging>jar</packaging> <generatePom>true</generatePom> </configuration> <goals> <goal>install-file</goal> </goals> </execution> </executions> </plugin>
zwróć uwagę
phase:clean
, aby zainstalować własną bibliotekę w swoim repozytorium, musisz uruchomićmvn clean
i wtedymvn install
źródło
<phase>process-resources</phase>
zamiast<phase>clean</phase>
. Faza zasobów procesowych wydaje się bardziej odpowiednia dla takiego scenariusza i jest zawsze wywoływana przed fazą kompilacji.clean
fazą jest bardzo mylące, nie jest częścią domyślnego cyklu życia i zniekształca znaczenieclean
. Ponadto sugerowana zmiana polegająca na użyciu fazy w domyślnym cyklu życia (np.validate
Lubprocess-resources
) zakończy się niepowodzeniem w sytuacji wielomodułowej, ponieważ agregator podejmuje próbę rozwiązania zależności przed wykonaniem jakichkolwiek niestandardowych celów dla modułów podrzędnych.<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin>
Spróbuj tego.
źródło
Zakres systemu został zaprojektowany tylko do obsługi plików „systemowych”; pliki znajdujące się w jakiejś stałej lokalizacji. Pliki w
/usr/lib
lub${java.home}
(nptools.jar
.). Nie został zaprojektowany do obsługi różnych.jar
plików w Twoim projekcie.Autorzy celowo odmówili wprowadzenia rozszerzeń nazw ścieżek, aby Cię zniechęcić. W rezultacie, na krótką metę możesz użyć
install:install-file
do zainstalowania w lokalnym repozytorium, a następnie pewnego dnia użyć menedżera repozytorium do udostępnienia.źródło
Użyj menedżera repozytorium i zainstaluj w nim tego rodzaju pliki słoików. To rozwiązuje wszystkie Twoje problemy i dla wszystkich komputerów w Twojej sieci.
źródło
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
- zobacz hub.docker.com/r/sonatype/nexus3, aby uzyskać szczegółowe informacje.Wypróbuj tę konfigurację. U mnie zadziałało:
<plugin> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warSourceDirectory>mywebRoot</warSourceDirectory> <warSourceExcludes>source\**,build\**,dist\**,WEB-INF\lib\*, WEB-INF\classes\**,build.* </warSourceExcludes> <webXml>myproject/source/deploiement/web.xml</webXml> <webResources> <resource> <directory>mywebRoot/WEB-INF/lib</directory> <targetPath>WEB-INF/lib</targetPath> <includes> <include>mySystemJar1.jar.jar</include> <include>mySystemJar2.jar</include> </includes> </resource> </webResources> </configuration> </plugin>
źródło
mvn install: install-file -DgroupId = com.paic.maven -DartifactId = tplconfig-maven-plugin -Dversion = 1.0 -Dpackaging = jar -Dfile = tplconfig-maven-plugin-1.0.jar -DgeneratePom = true
Zainstaluj jar w lokalnym repozytorium.
źródło
Dzięki Ging3r otrzymałem rozwiązanie:
wykonaj następujące kroki:
nie używaj w tagu zależności. Użyj następującego w tagu zależności w pliku pom.xml:
<dependency> <groupId>com.netsuite.suitetalk.proxy.v2019_1</groupId> <artifactId>suitetalk-axis-proxy-v2019_1</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.netsuite.suitetalk.client.v2019_1</groupId> <artifactId>suitetalk-client-v2019_1</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>com.netsuite.suitetalk.client.common</groupId> <artifactId>suitetalk-client-common</artifactId> <version>1.0.0</version> </dependency>
użyj poniższego kodu w tagu wtyczek w pliku pom.xml:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> <executions> <execution> <id>suitetalk-proxy</id> <phase>clean</phase> <configuration> <file>${basedir}/lib/suitetalk-axis-proxy-v2019_1-1.0.0.jar</file> <repositoryLayout>default</repositoryLayout> <groupId>com.netsuite.suitetalk.proxy.v2019_1</groupId> <artifactId>suitetalk-axis-proxy-v2019_1</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <generatePom>true</generatePom> </configuration> <goals> <goal>install-file</goal> </goals> </execution> <execution> <id>suitetalk-client</id> <phase>clean</phase> <configuration> <file>${basedir}/lib/suitetalk-client-v2019_1-2.0.0.jar</file> <repositoryLayout>default</repositoryLayout> <groupId>com.netsuite.suitetalk.client.v2019_1</groupId> <artifactId>suitetalk-client-v2019_1</artifactId> <version>2.0.0</version> <packaging>jar</packaging> <generatePom>true</generatePom> </configuration> <goals> <goal>install-file</goal> </goals> </execution> <execution> <id>suitetalk-client-common</id> <phase>clean</phase> <configuration> <file>${basedir}/lib/suitetalk-client-common-1.0.0.jar</file> <repositoryLayout>default</repositoryLayout> <groupId>com.netsuite.suitetalk.client.common</groupId> <artifactId>suitetalk-client-common</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <generatePom>true</generatePom> </configuration> <goals> <goal>install-file</goal> </goals> </execution> </executions> </plugin>
Dołączam 3 słoiki z folderu lib:
Na koniec użyj,
mvn clean
a następniemvn install
lub `` mvn clean install '' i po prostu uruchom plik jar z folderu docelowego lub ścieżki instalacji (patrzmvn install
dziennik):java -jar abc.jar
uwaga: pamiętaj o jednej rzeczy, jeśli pracujesz w jenkins, najpierw użyj,
mvn clean
a następniemvn clean install
polecenie działa dla ciebie, ponieważ z poprzednim kodemmvn clean install
pamięci podręcznej magazynu poleceń dla zależności.źródło