2012-06-07 13 views
67

Ich habe ein JAR in meinem Android-Projekt und ich möchte, dass es zum endgültigen APK hinzugefügt wird. Okay, hier gehe ich:Maven und Hinzufügen von JARs zum Systembereich

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

Aber wenn ich mvn package leite ich eine Warnung bin immer:

[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 

Und in der letzten APK gibt es keine JAR-Dateien.

Wie behebe ich das?

+3

Sie können den Systembereich nicht auf diese Weise verwenden. benutze install: install-file. – bmargulies

+0

@bmargulies Können Sie sagen, wofür ist dieser Bereich? – efpies

+0

Ich wechselte zu grandle und habe diese Kopfschmerzen nicht mehr, außer jetzt versuche ich, eine Open-Source-Bibliothek mit Maven zu verwenden und provisorisch ein Glas in (das ist so einfach in Großbuchstaben und so schwer in Maven). –

Antwort

20

Sie müssen add the jar zu Ihrem lokalen Maven-Repository. Alternativ (bessere Option), um das richtige Repository angeben (falls vorhanden), so kann er automatisch von Maven

In jedem Fall heruntergeladen werden, entfernen Sie den <systemPath> Tag aus der Abhängigkeit

+3

Ich habe diesen Artikel gesehen aber ich hatte gehofft, nicht "maven install" auf jedem computer zu installieren, wo ich dieses projekt aufbauen möchte (leider habe ich diese JAR nicht in repos gefunden). Vielen Dank! :) – efpies

+0

Es kann als Teil des Builds gescriptet werden. –

3

Verwenden Sie einen Repository-Manager und installieren Sie diese Art von Gläser hinein. Das löst Ihre Probleme überhaupt und für alle Computer in Ihrem Netzwerk.

+2

Wir planten, morgen oder später ein Repo auf dem lokalen Server durchzuführen, aber vorher sollte ich dieses Problem auf andere Weise lösen. – efpies

+0

Wie @efpies erwähnt, kann dies eine Antwort auf den Himmel sein, wenn ein Entwickler keine Berechtigung zum Erstellen eines Repo-Managers hat. – javadba

9

Systemumfang wurde nur entwickelt, um mit "System" -Dateien umzugehen; Dateien sitzen an einem festen Ort. Dateien in /usr/lib oder ${java.home} (z. B. tools.jar). Es wurde nicht entwickelt, um verschiedene .jar Dateien in Ihrem Projekt zu unterstützen.

Die Autoren weigerten sich absichtlich, die Pfadnamenerweiterungen richtig zu machen, um Sie davon abzuhalten. Als Ergebnis können Sie kurzfristig install:install-file in das lokale Repo installieren und dann eines Tages einen Repo-Manager zum Teilen verwenden.

98

Ich weiß nicht, den wahren Grund aber Maven schiebt Entwickler alle Bibliotheken installieren (custom auch) in einigen Maven-Repositories, so ist scope:system nicht gut gefallen hat, eine einfache Abhilfe ist maven-install-plugin

die folgen zu verwenden Nutzung:

Ihre Abhängigkeit auf diese Weise schreiben

<dependency> 
    <groupId>com.mylib</groupId> 
    <artifactId>mylib-core</artifactId> 
    <version>0.0.1</version> 
</dependency> 

dann, fügen Sie 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> 

achten Sie auf phase:clean, Ihre kundenspezifische Bibliothek in Ihrem Repository installieren, müssen Sie mvn clean laufen und dann mvn install

+4

Ausgezeichnete Antwort, genau das, was ich gesucht habe. –

+0

Vielen Dank, dies ist die Lösung, die ich wollte – Frank

+5

Warum nicht ' Prozess-Ressourcen' anstelle von ' sauber' verwenden. Die Prozess-Ressourcen-Phase sieht für ein solches Szenario geeigneter aus und wird immer vor der Kompilierungsphase aufgerufen. – jplandrain

3

diese Konfiguration Versuchen. Er arbeitete für mich:

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

mvn install: install-Datei -DgroupId = com.paic.maven -DartifactId = tplconfig-Maven-Plugin -Dversion = 1,0 -Dpackaging = jar -dfile = tplconfig-Maven-Plugin -1.0.jar -DgeneratePom = true

Installieren Sie das JAR im lokalen Repository.

+2

Dies ist mühsam, als direkt durch die Pom hinzufügen. –

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

Versuchen Sie es.

+0

eine Erklärung? Vielen Dank! – Allan

Verwandte Themen