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 ?

151voto

Ging3r Points 1659

Je ne connais pas la vraie raison mais Maven pousse les développeurs à installer toutes les bibliothèques (y compris les bibliothèques personnalisées) dans certains dépôts maven, donc scope:system n'est pas très appréciée. Une solution de contournement simple consiste à utiliser l'option maven-install-plugin

suivre 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>

prêter attention à phase:clean pour installer votre bibliothèque personnalisée dans votre dépôt, vous devez exécuter mvn clean et ensuite mvn install

25voto

Attila Points 18290

Vous devrez ajouter le pot à votre dépôt local de maven. Alternativement (meilleure option), spécifiez le dépôt approprié (s'il existe) afin qu'il soit automatiquement téléchargé par maven.

Dans les deux cas, retirez le <systemPath> de la dépendance

17voto

user9064925 Points 171
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>

Essayez ça.

11voto

bmargulies Points 49855

System Scope n'a été conçu que pour traiter les fichiers "système", c'est-à-dire les fichiers situés à un endroit fixe. Les fichiers dans /usr/lib ou ${java.home} (par exemple tools.jar ). Il n'a pas été conçu pour prendre en charge divers .jar dans votre projet.

Les auteurs ont intentionnellement refusé de faire fonctionner correctement les expansions de nom de chemin pour que cela vous décourage. Par conséquent, à court terme, vous pouvez utiliser install:install-file pour installer dans le repo local, et puis un jour utiliser un gestionnaire de repo pour partager.

4voto

Essayez cette configuration. Elle 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>

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