2012-05-19 1 views
6

J'ai un projet Spring roo (essentiellement un projet maven). Je veux ajouter dropboard sdk au projet, le problème est que ce n'est pas dans maven. J'ai ajouté les fichiers suivantscomment ajouter jar externe au projet 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> 

Il a résolu l'erreur de compilation, mais quand je lance le projet, au printemps Tool Suite, les fichiers jar ne sont pas ajoutés à la guerre lib. Comment faire pour que maven ajoute mes fichiers jar externes à mon dossier war lib?

Je ne veux pas installer le pot dans maven depuis, je dois l'installer dans toutes les machines qui utilisent le projet

Répondre

2

Je recommande la création d'un référentiel « tiers » dans un serveur de dépôt Maven tels que Nexus ou Artifactory, et télécharger le pot à cet endroit. Même si cela signifie mettre le jar dans Maven, au moins avec un serveur de référentiel, il est disponible pour tous ceux qui construiront votre application.

+0

Je ne veux pas utiliser de serveur supplémentaire pour le repo, y a-t-il un rapport public que je puisse utiliser? –

+0

Même si vous définissez la dépendance de la liste de dépôt, vous rencontrerez de nombreux autres problèmes sans utiliser de référentiel interne. Si vous ne voulez pas gérer de serveur supplémentaire, vous pouvez toujours utiliser la version SaaS - http://www.jfrog.com/art-online.php – JBaruch

+0

Voir http://stackoverflow.com/questions/10533131/dropbox- sdk-repository-maven - le SDK dropbox n'a pas de référentiel Maven public pour le moment. – Kkkev

2

Je ne recommande pas cette approche, mais vous pouvez ajouter une configuration POM pour installer la dépendance 3ème partie dans un profil distinct:

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

Il y a deux profils ici: install-dependencies et build. La première installe la dépendance dropbox-sdk dans votre repository et doit être exécuté une fois sur chaque machine comme suit:

mvn -Pinstall-dependencies validate 

La seconde est activée par défaut, et ajoute le SDK Dropbox comme une dépendance.

Mais pour être honnête, ce n'est pas beaucoup mieux que de courir

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 

sur chaque machine. L'autre inconvénient de cette approche est que vous devrez également ajouter toutes les dépendances du dropbox-sdk à votre build, alors que si cela est fait correctement en ajoutant le JAR et un POM à un serveur de référentiel, alors Maven calculer les dépendances transitives correctement.

+0

j'ai trouvé comment utiliser dans le référentiel de projet, ce problème fixe –

12

J'ai finalement trouvé une solution soignée, beaucoup plus simple à mettre en œuvre. Vous ajoutez un référentiel dans le projet java et un lien vers celui-ci dans le pom.

Vous ajoutez un Maven comme ce référentiel en projet:

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

Ensuite, créez une structure de dossiers dans le dossier racine de votre projet qui ressemble à ceci

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

et ajoutez la dépendance comme vous le feriez normalement.

Cette approche a le moins de code et de travail requis, et si cette bibliothèque est ajoutée à un dépôt maven, vous pouvez toujours supprimer votre référentiel in-project.

http://bit.ly/OGVHSN

+1

très agréable! pour obtenir un groupId comme "com.some.groupId.with.dots" structure de répertoire d'utilisation de travail 'com/some/groupId/avec/points/artifactId/version/...' –

0

Je sais que je suis vraiment en retard, mais je me demandais pourquoi vous ne mettriez pas dans le pot dans le repo local dans le fichier .m2 et ajouter une référence à la pom à partir de là?

+0

le problème nécessite de résoudre est de rendre le projet portable , quelqu'un d'autre vérifier ce projet n'aura pas de pot dans leur repo local –

0
  1. changer le chemin lib: src/main/webapp/WEB-INF/lib

  2. dans pom.xml:

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

0

Il y a un solution beaucoup plus facile, qui est définie webResource dans le plugin. Par la solution, vous pouvez ajouter tous les fichiers de votre disque local à la guerre! Un échantillon est comme ci-dessous,

 <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 meilleure façon de résoudre ce problème est d'ajouter ces fichiers jar locaux dans le dossier WEB-INF/lib. Vous trouverez tous ces pots emballés dans votre fichier de guerre final alors.

Questions connexes