2012-05-19 12 views
6

Tengo un proyecto de Spring roo (básicamente un proyecto de maven). Quiero agregar dropbox sdk al proyecto, el problema es que no está en maven. He añadido los siguientes archivoscómo agregar un contenedor externo al proyecto de webapp de 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> 

Se solucionó el error de compilación, pero cuando corro el proyecto, en la primavera de Tool Suite, los archivos jar no se agregan a la carpeta lib guerra. ¿Cómo puedo hacer que Maven agregue mis archivos jar externos a mi carpeta war lib?

no quiero instalar el frasco en experto ya que, tengo que instalarlo en todas las máquinas que utiliza el proyecto

Respuesta

2

recomiendo crear un repositorio "tercero" en un servidor de repositorio de Maven como Nexus o Artifactory, y subir el jar a allí. A pesar de que eso significa poner el contenedor en Maven, al menos con un servidor de repositorio, está disponible para cualquiera que construya su aplicación.

+0

no quiero ejecutar ningún servidor adicional para el repositorio, ¿hay algún repositorio público que pueda utilizar? –

+0

Incluso si ordena la dependencia de dropbox, tendrá muchos otros problemas sin usar el repositorio interno. Si no desea administrar un servidor adicional, siempre puede usar la versión de SaaS - http://www.jfrog.com/art-online.php – JBaruch

+0

Vea http://stackoverflow.com/questions/10533131/dropbox- sdk-repository-maven - dropbox SDK no tiene un repositorio público de Maven en este momento. – Kkkev

2

No recomiendo este enfoque, pero se puede añadir un poco de configuración de POM para instalar la dependencia tercero-partido en un perfil independiente:

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

Hay dos perfiles aquí: install-dependencies y build. El primero se instala la dependencia dropbox-sdk en su repositorio de Maven y necesita ser ejecutado una vez en cada máquina de la siguiente manera:

mvn -Pinstall-dependencies validate 

La segunda está activado por defecto, y añade el SDK de Dropbox como una dependencia.

Para ser honesto sin embargo, esto no es mucho mejor que correr

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 

en cada máquina.

La otra desventaja de este enfoque es que tendrá que agregar todas las dependencias del dropbox-sdk a su compilación también, mientras que si se hace correctamente agregando el JAR y un POM a un servidor de repositorio, entonces Maven calcule las dependencias transitivas de manera adecuada.

+0

descubrí cómo usarlo en el repositorio de proyectos, ¡eso solucionó el problema –

12

Finalmente encontré una solución ordenada, que es mucho más fácil de implementar. Agregas un repositorio dentro del proyecto dentro del proyecto java y lo enlazas en el pom.

se agrega un repositorio en el proyecto de Maven como esto:

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

A continuación, cree una estructura de carpetas en la carpeta raíz del proyecto que se ve algo como esto

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

y añadir la dependencia como lo haría normalmente.

Este enfoque tiene la menor cantidad de código y trabajo requerido, y si esa biblioteca alguna vez se agrega en un repositorio maven, siempre puede eliminar su repositorio en el proyecto.

http://bit.ly/OGVHSN

+1

muy bonito! para obtener un ID de grupo como "com.some.groupId.with.dots", use la estructura de directorios de uso 'com/some/groupId/with/dots/artifactId/version/...' –

0

Sé que soy muy tarde pero me preguntaba por qué no se pondría en el frasco en el repositorio local en el archivo .m2 y añadir una referencia a la pom a partir de ahí?

+0

El problema que requiere resolver es hacer que el proyecto sea portátil , alguien más revisa que este proyecto no tendrá jar en su repositorio local –

0
  1. cambio de la trayectoria lib a: src/main/webapp/WEB-INF/lib

  2. en pom.xml:

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

0

Hay una solución mucho más fácil, que se establece webResource en el complemento. ¡Con la solución, puede agregar cualquier archivo de su disco local a la guerra! Una muestra es la siguiente,

 <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

La mejor manera de resolver este problema es agregar estos archivos jar locales a la carpeta WEB-INF/lib. Encontrarás todos estos frascos empaquetados en tu archivo de guerra final.

Cuestiones relacionadas