87 votes

Maven et l'ajout de JARs à la portée du système

J'ai un JAR dans mon projet Android et je veux qu'il soit ajouté à l'APK final. Ok, c'est parti :

    <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 JARs.

Comment puis-je réparer ça ?

3voto

khmarbaise Points 28405

Utilisez un gestionnaire de référentiel et installez ce type de bocaux dans celui-ci. Cela résoudra vos problèmes pour tous les ordinateurs de votre réseau.

1voto

breezily Points 49

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 jar dans le dépôt local.

0voto

ankit Points 330

Grâce à Ging3r, j'ai trouvé la solution :

suivez les étapes suivantes :

  1. ne pas utiliser dans la balise de dépendance. Utilisez ce qui suit dans la balise dependencies du 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>
  2. utilisez le code suivant dans le tag 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 bocaux du dossier lib :

including external jar in spring boot project

Enfin, utilisez mvn clean et ensuite mvn install ou 'mvn clean install' et exécutez simplement le fichier jar à partir du dossier cible ou du chemin d'installation (voir mvn install log) :

java -jar abc.jar

note : Souvenez-vous d'une chose si vous travaillez sur jenkins alors utilisez d'abord mvn clean et ensuite mvn clean install fonctionne pour vous car avec le code précédent mvn clean install cache du magasin de commande pour la dépendance.

0voto

Chris Gregory Points 31

En suivant ce fil de discussion, j'ai pu configurer le plugin d'installation pour qu'il charge mon jar personnalisé, mais le plugin ne voyait pas mon fichier d'installation. configuration lors de l'exécution d'un mvn install

J'utilise la base maven-install-plugin:2.5.2 en utilisant le maven:3.6.3-jdk-8 image docker.

Je ne comprends pas bien cette note dans la documentation (à la fin de la section), mais il semble que vous pouvez donner au but de la phase un id d'exécution en le forçant à utiliser votre configuration :

Remarque : les configurations à l'intérieur de l'élément différaient de celles qui se trouvent à l'extérieur en ce sens qu'elles ne pouvaient pas être utilisées à partir d'une invocation directe en ligne de commande, car elles n'étaient appliquées que lorsque la phase du cycle de vie à laquelle elles étaient liées était invoquée. Il fallait donc déplacer une section de configuration en dehors de la section des exécutions pour l'appliquer globalement à toutes les invocations du plugin. Depuis Maven 3.3.1, ce n'est plus le cas car vous pouvez spécifier sur la ligne de commande l'identifiant d'exécution pour l'invocation directe du plugin. Ainsi, si vous voulez exécuter le plugin ci-dessus et sa configuration spécifique execution1 à partir de la ligne de commande, vous pouvez exécuter :

mvn myqyeryplugin:queryMojo@execution1

Ma dernière commande Docker fonctionnelle :

docker run -it --rm --name parser -v "$(shell pwd)":/usr/src/parser -w /usr/src/parser maven:3.6.3-jdk-8 mvn -X install:install-file@install-my-jar-file

install-my-jar-file est mon identifiant d'exécution <execution><id>install-my-jar-file</id>...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X