2012-05-19 33 views
6

Ho un progetto Spring roo (fondamentalmente un progetto maven). Voglio aggiungere dropbox sdk al progetto, il problema è che non è in Maven. Ho aggiunto i seguenti filecome aggiungere un jar esterno al progetto webapp maven

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

E 'risolto l'errore di compilazione, ma quando ho eseguito il progetto, in primavera Tool Suite, i file jar non vengono aggiunti alla cartella lib guerra. Come faccio a fare in modo che Maven aggiunga i miei file jar esterni alla cartella war lib?

Non voglio installare il vaso in Maven in quanto, devo installarlo in tutte le macchine che utilizzano il progetto

risposta

2

vi consiglio di creazione di un repository "terzo" in un server di repository Maven come Nexus o Artifactory e carica il barattolo lì. Anche se ciò significa mettere il barattolo in Maven, almeno con un server di repository, è disponibile per chiunque costruisca la tua applicazione.

+0

Non voglio eseguire alcun server aggiuntivo per il repository, c'è un repository pubblico che posso utilizzare? –

+0

Anche se si risolve la dipendenza della casella personale, si verificano molti altri problemi senza utilizzare il repository interno. Se non si desidera gestire un server aggiuntivo, è sempre possibile utilizzare la versione SaaS - http://www.jfrog.com/art-online.php – JBaruch

+0

Vedere http://stackoverflow.com/questions/10533131/dropbox- sdk-repository-maven - il dropbox SDK non ha un repository Maven pubblico al momento. – Kkkev

2

Non consiglio questo approccio, ma si potrebbe aggiungere un po 'di configurazione POM installare la dipendenza 3rd-party in un profilo separato:

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

Ci sono due profili qui: install-dependencies e build. La prima installa il dropbox-sdk dipendenza nel repository Maven e deve essere eseguito una sola volta su ogni macchina come segue:

mvn -Pinstall-dependencies validate 

Il secondo è abilitato di default, e aggiunge la Dropbox SDK come una dipendenza.

Per essere onesti, però, questo non è molto meglio che correre

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 

su ogni macchina.

L'altro svantaggio di questo approccio è che dovrai aggiungere tutte le dipendenze di dropbox-sdk alla tua build, mentre se è fatto correttamente aggiungendo il JAR e un POM a un server di repository, allora Maven calcolare correttamente le dipendenze transitive.

+0

ho capito come usare nel repository del progetto, quel problema fisso –

12

Ho finalmente trovato una soluzione accurata, che è molto più facile da implementare. Aggiungi un repository nel progetto all'interno del progetto java e collegalo ad esso nel pom.

si aggiunge un repository in-progetto in Maven come questo:

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

quindi creare una struttura di cartelle nella cartella principale del progetto che sembra qualcosa di simile

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

e aggiungere il dipendenza come faresti normalmente.

Questo approccio ha il minor numero di codice e lavoro richiesto e, se tale libreria viene aggiunta a un repository di maven, è sempre possibile rimuovere il repository nel progetto.

http://bit.ly/OGVHSN

+1

molto bello! per ottenere un groupId come "com.some.groupId.with.dots" utilizzare la struttura di directory 'com/some/groupId/with/dots/manufactId/version/...' –

0

So che sono davvero in ritardo, ma mi chiedevo il motivo per cui non avrebbe messo in vaso nel repository locale nel file di .m2 e aggiungere un riferimento alla pom da lì?

+0

il problema richiede la risoluzione è rendere il progetto portatile , qualcun altro controlla questo progetto non avrà jar nel loro repository locale –

0
  1. cambiamento il percorso lib a: src/main/webapp/WEB-INF/lib

  2. in pom.xml:

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

0

C'è una soluzione molto più semplice, che è impostata webResource nel plugin. Con la soluzione, puoi aggiungere qualsiasi file del tuo disco locale alla guerra! Un esempio è il seguente,

 <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

Il modo migliore per risolvere questo problema è aggiungere questi file jar locali alla cartella WEB-INF/lib. Troverai tutti questi vasi impacchettati nel tuo file di guerra finale.

Problemi correlati