J'ai un JAR dans mon projet Android et je souhaite qu'il soit ajouté au fichier APK final. D'accord, je vais ici:
<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>
Mais quand je cours, mvn package
je reçois un avertissement:
[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
Et dans l'APK final, il n'y a pas de JAR.
Comment résoudre ce problème?
Réponses:
Vous devrez ajouter le fichier jar à votre référentiel maven local. Alternativement (meilleure option) spécifiez le référentiel approprié (s'il en existe un) afin qu'il puisse être téléchargé automatiquement par maven
Dans les deux cas, supprimez la
<systemPath>
balise de la dépendancela source
maven install
sur tous les ordinateurs sur lesquels je souhaite construire ce projet (malheureusement je n'ai pas trouvé ce JAR dans les dépôts). Merci! :)Je ne connais pas la vraie raison mais Maven pousse les développeurs à installer toutes les bibliothèques (personnalisées aussi) dans certains référentiels maven, donc ce
scope:system
n'est pas très apprécié, une solution de contournement simple consiste à utilisermaven-install-plugin
suivez l'usage:
écrivez votre dépendance de cette façon
<dependency> <groupId>com.mylib</groupId> <artifactId>mylib-core</artifactId> <version>0.0.1</version> </dependency>
puis, ajoutez 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>
faites attention à
phase:clean
, pour installer votre bibliothèque personnalisée dans votre référentiel, vous devez exécutermvn clean
puismvn install
la source
<phase>process-resources</phase>
place de<phase>clean</phase>
. La phase processus-ressources semble plus appropriée pour un tel scénario et elle est toujours appelée avant la phase de compilation.clean
phase est très trompeuse, elle ne fait pas partie du cycle de vie par défaut et déforme le sens declean
. De plus, la modification suggérée pour utiliser une phase dans le cycle de vie par défaut (par exemplevalidate
ouprocess-resources
) échouera dans une situation multi-module, car la résolution des dépendances est tentée par l'agrégateur, avant l' exécution des objectifs personnalisés pour les modules enfants.<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin>
Essaye ça.
la source
La portée du système a été conçue uniquement pour traiter les fichiers «système»; fichiers assis dans un emplacement fixe. Fichiers dans
/usr/lib
ou${java.home}
(par exempletools.jar
). Il n'a pas été conçu pour prendre en charge divers.jar
fichiers dans votre projet.Les auteurs ont intentionnellement refusé de faire fonctionner les extensions de chemins pour que cela vous décourage. En conséquence, à court terme, vous pouvez utiliser
install:install-file
pour installer dans le dépôt local, puis un jour utiliser un gestionnaire de dépôt pour partager.la source
Utilisez un gestionnaire de référentiel et installez-y ce type de fichiers jar. Cela résout vos problèmes à tous et pour tous les ordinateurs de votre réseau.
la source
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
- voir hub.docker.com/r/sonatype/nexus3 pour plus de détails.Essayez cette configuration. Cela a fonctionné pour moi:
<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>
la source
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
Installez le fichier jar dans le référentiel local.
la source
Grâce à Ging3r, j'ai la solution:
Suivez ces étapes:
ne pas utiliser dans la balise de dépendance. Utilisez la balise suivante dans les dépendances dans le fichier 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>
utilisez le code suivant dans la balise plugins du fichier 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>
J'inclus 3 jars du dossier lib:
Enfin, utilisez
mvn clean
and thenmvn install
ou 'mvn clean install' et exécutez simplement le fichier jar à partir du dossier cible ou du chemin où install (voir lemvn install
journal):java -jar abc.jar
Remarque: souvenez-vous d'une chose si vous travaillez chez jenkins, puis utilisez d'abord
mvn clean
, puis lamvn clean install
commande fonctionne pour vous, car avec lemvn clean install
cache de magasin de commandes de code précédent pour les dépendances.la source