2012-05-19 25 views
6

Ich habe ein Spring Roo Projekt (im Grunde ein Maven-Projekt). Ich möchte Dropbox SDK zum Projekt hinzufügen, Problem ist es nicht in Maven. Ich habe die folgenden DateienWie man ein externes Glas zu maven webapp Projekt hinzufügen

<dependency> 
     <groupId>com.dropbox</groupId> 
     <artifactId>dropbox-sdk</artifactId> 
     <version>1.3.1</version> 
     <scope>system</scope> 
     <systemPath>${project.basedir}/libs/dropbox-java-sdk-1.3.1.jar</systemPath> 
    </dependency> 

Sie den Compiler-Fehler behoben, aber wenn ich das Projekt ausführen, im Frühjahr Tool Suite werden die JAR-Dateien nicht in dem Krieg lib Ordner hinzugefügt. Wie kann ich maven meine externen JAR-Dateien in meinen WAR-lib-Ordner einfügen?

Ich will nicht, da das Glas in Maven installieren, ich habe es installieren in allen Maschinen, die das Projekt verwendet

Antwort

2

Ich empfehle, eine „dritte Partei“ Repository in einem Maven Repository-Server zu schaffen, wie Nexus oder Artefactory und lade das Glas dorthin. Auch wenn das bedeutet, dass man das Glas in Maven einbaut, zumindest mit einem Repository-Server, steht es jedem zur Verfügung, der Ihre Anwendung erstellen wird.

+0

Ich möchte keinen zusätzlichen Server für den Repo laufen, gibt es ein öffentliches Repo, das ich nutzen kann? –

+0

Auch wenn Sie die Dropbox-Abhängigkeit aussortieren, werden Sie viele andere Probleme ohne internes Repository treffen. Wenn Sie keinen zusätzlichen Server verwalten möchten, können Sie immer die SaaS-Version verwenden - http://www.jfrog.com/art-online.php – JBaruch

+0

Siehe http://stackoverflow.com/questions/10533131/dropbox- sdk-repository-maven - das Dropbox-SDK hat momentan kein öffentliches Maven-Repository. – Kkkev

2

Ich empfehle dieses Vorgehen nicht, aber man konnte einige POM Konfiguration fügen Sie die 3rd-Party-Abhängigkeit in einem separaten Profil zu installieren:

<profiles> 
    <profile> 
     <id>install-dependencies</id> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-install-plugin</artifactId> 
        <version>2.3.1</version> 
        <executions> 
         <execution> 
          <id>install-dropbox-sdk</id> 
          <phase>validate</phase> 
          <goals> 
           <goal>install-file</goal> 
          </goals> 
          <configuration> 
           <groupId>com.dropbox</groupId> 
           <artifactId>dropbox-sdk</artifactId> 
           <version>1.3.1</version> 
           <file>src/main/lib/dropbox-java-sdk-1.3.1.jar</file> 
           <packaging>jar</packaging> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

    <profile> 
     <id>build</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 

     <dependencies> 
      <dependency> 
       <groupId>com.dropbox</groupId> 
       <artifactId>dropbox-sdk</artifactId> 
       <version>1.3.1</version> 
      </dependency> 
     </dependencies> 
    </profile> 
</profiles> 

Es gibt zwei Profile hier: install-dependencies und build. Die erste installiert die dropbox-sdk Abhängigkeit in Ihr Maven-Repository und muss auf jedem Rechner einmal ausgeführt werden, wie folgt:

mvn -Pinstall-dependencies validate 

Der zweite standardmäßig aktiviert ist, und fügt die Dropbox SDK als Abhängigkeit. obwohl

Um ehrlich zu sein, ist dies nicht viel besser als auf jeder Maschine

mvn install:install-file -Dfile=src/main/lib/dropbox-java-sdk-1.3.1.jar -DgroupId=com.dropbox -DartifactId=dropbox-sdk -Dversion=1.3.1 -Dpackaging=jar 

läuft. Der andere Nachteil dieses Ansatzes ist, dass Sie alle Abhängigkeiten von dropbox-sdk zu Ihrem Build hinzufügen müssen. Wenn dies jedoch durch Hinzufügen der JAR und eines POM zu einem Repository-Server ordnungsgemäß durchgeführt wird, dann wird Maven dies tun Berechnen Sie die transitiven Abhängigkeiten ordnungsgemäß.

+0

ich herausgefunden, wie im Projekt-Repository zu verwenden, das behobene Problem –

12

Ich habe endlich eine saubere Lösung gefunden, die viel einfacher zu implementieren ist. Sie fügen ein in-Projekt-Repository innerhalb des Java-Projekts hinzu und verknüpfen es im Pom.

Sie fügen ein In-Projekt-Repository in Maven wie folgt aus:

<repository> 
    <id>in-project</id> 
     <name>In Project Repo</name> 
     <url>file://${project.basedir}/libs</url> 
</repository> 

Dann eine Ordnerstruktur im Stammordner Ihres Projekts erstellen, die so etwas wie dieses

/groupId/artifactId/version/artifactId-version.jar 

und fügen Sie sieht Abhängigkeit, wie Sie es normalerweise tun würden.

Dieser Ansatz hat den geringsten Umfang an Code und Arbeit erforderlich, und wenn diese Bibliothek jemals in ein Maven-Repository hinzugefügt wird, können Sie immer Ihr in-Projekt-Repository entfernen.

http://bit.ly/OGVHSN

+1

sehr nett! Um eine groupId wie "com.some.groupId.with.dots" zu erhalten, benutze die Verzeichnisstruktur 'com/some/groupId/mit/dots/artifactId/version/...' –

0

Ich weiß, ich bin wirklich spät, aber ich habe mich gefragt, warum Sie in dem Glas in der lokalen Repo in der .m2 Datei und fügen Sie einen Verweis auf die pom von dort nicht setzen würden?

+0

das Problem, das gelöst werden muss, ist, das Projekt portierbar zu machen , jemand anderes auschecken dieses Projekt wird kein Glas in ihrem lokalen Repo haben –

0
  1. Änderung der lib Pfad: src/main/webapp/WEB-INF/lib

  2. in pom.xml:

    <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/xxxx.jar</systemPath>

0

Es gibt eine viel einfacher Lösung, die WebResource im Plugin festgelegt ist. Durch die Lösung können Sie beliebige Dateien Ihrer lokalen Festplatte zum Krieg hinzufügen! Eine Probe ist als unten,

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <warName>api</warName> 
       <webResources> 
        <resource> 
         <directory>libs/</directory> 
         <targetPath>WEB-INF/lib</targetPath> 
         <includes> 
          <include>**/*.jar</include> 
         </includes> 
        </resource> 
       </webResources> 
      </configuration> 
     </plugin> 
1

Der beste Weg, um dieses Problem zu lösen, ist diese lokalen JAR-Dateien zu WEB-INF/lib Ordner hinzuzufügen. Sie werden dann alle diese Gefäße in Ihrer endgültigen Kriegsdatei finden.

Verwandte Themen