2010-05-25 6 views
2

Mon but est de prendre une application web Grails et de la construire dans un ARchive Web (fichier WAR) en utilisant Maven, et la clé est que il doit remplir le dossier "plugins" sans accès direct à Internet. Un fichier "JAR" de la webapp Grails aura déjà le dossier plugins avec les fichiers JAR, mais le script build de maven devrait prendre soin de le peupler, comme pour tous les projets WAR traditionnels (tels que WEB-INF/lib/si elle est vide)Maven ne résout pas un plug-in Grails local

Ceci est une erreur lors de l'exécution de mvn grails:run-app avec Grails 1.1 en utilisant Maven 2.0.10 et org.grails: grails-maven-plugin: 1.0. (Ce plugin « mise en veille prolongée-1.1 » est nécessaire pour faire Gorm.)

[INFO] [grails:run-app] 
Running pre-compiled script 
Environment set to development 
Plugin [hibernate-1.1] not installed, resolving.. 
Reading remote plugin list ... 
Error reading remote plugin list [svn.codehaus.org], building locally... 
Unable to list plugins, please check you have a valid internet connection: svn.codehaus.org 
Reading remote plugin list ... 
Error reading remote plugin list [plugins.grails.org], building locally... 
Unable to list plugins, please check you have a valid internet connection: plugins.grails.org 
Plugin 'hibernate' was not found in repository. If it is not stored in a configured repository you will need to install it manually. Type 'grails list-plugins' to find out what plugins are available. 

La machine de construction n'a pas accès à Internet et doit utiliser un référentiel interne/d'entreprise, de sorte que cette erreur est juste que Maven Ne trouvez pas l'artefact requis partout. Cette dépendance est déjà incluse avec le logiciel stock Grails qui est installé localement, donc j'ai juste besoin de comprendre comment obtenir mon fichier POM pour décompresser ce fichier ZIP dans le dossier "plugins" de ma webapp.

J'ai essayé d'installer le plugin manuellement dans mon dépôt local et en en faisant une dépendance explicite dans POM.xml, mais il n'est toujours pas reconnu. Peut-être que vous ne pouvez pas tirer vers le bas des plugins Grails comme vous le feriez d'une référence standard Maven? Je peux configurer manuellement la webapp Grails à partir de la ligne de commande, ce qui crée correctement ce dossier ./plugins local. C'est un pas dans la bonne direction, alors peut-être la question est: comment puis-je intégrer cet objectif dans mon POM? mvn grails:install-plugin -DpluginUrl=%GRAILS_HOME%/plugins/grails-hibernate-1.1.zip

Voici une copie de mon fichier POM.xml, qui a été généré à l'aide d'un archétype.

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.samples</groupId> 
    <artifactId>sample-grails</artifactId> 
    <packaging>war</packaging> 
    <name>Sample Grails webapp</name> 
    <properties> 
     <sourceComplianceLevel>1.5</sourceComplianceLevel> 
    </properties> 
    <version>0.0.1-SNAPSHOT</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.grails</groupId> 
      <artifactId>grails-crud</artifactId> 
      <version>1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.grails</groupId> 
      <artifactId>grails-gorm</artifactId> 
      <version>1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>opensymphony</groupId> 
      <artifactId>oscache</artifactId> 
      <version>2.4</version> 
      <exclusions> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.jms</groupId> 
        <artifactId>jms</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.servlet</groupId> 
        <artifactId>servlet-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
      <version>1.8.0.7</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.5.6</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <!-- 
     <dependency> 
      <groupId>org.grails</groupId> 
      <artifactId>grails-hibernate</artifactId> 
      <version>1.1</version> 
      <type>zip</type> 
     </dependency> 
     --> 
    </dependencies> 
    <build> 
     <pluginManagement /> 
     <plugins> 
      <plugin> 
       <groupId>org.grails</groupId> 
       <artifactId>grails-maven-plugin</artifactId> 
       <version>1.0</version> 
       <extensions>true</extensions> 
       <executions> 
        <execution> 
         <goals> 
          <goal>init</goal> 
          <goal>maven-clean</goal> 
          <goal>validate</goal> 
          <goal>config-directories</goal> 
          <goal>maven-compile</goal> 
          <goal>maven-test</goal> 
          <goal>maven-war</goal> 
          <goal>maven-functional-test</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>${sourceComplianceLevel}</source> 
        <target>${sourceComplianceLevel}</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Répondre

1

Ceci est un problème délicat. J'allais suggérer d'utiliser Grails 1.3, ce qui vous permet de tirer des plugins Grails à partir de dépôts compatibles Maven, mais je ne pense pas que cela aide Maven (pour le moment).

Donc, je vais suggérer quelque chose que je n'ai pas essayé moi-même, mais peut travailler. J'ai une certaine confiance parce que j'ai écrit le code approprié dans le plugin Grails Maven;) Aucune garantie cependant.

Avec ça, commençons. Tout d'abord, vous devez saisir le code pour les plugins Grails concernés. Par exemple, vous pouvez obtenir Hibernate à partir d'ici:

http://svn.codehaus.org/grails/trunk/grails-plugins/grails-hibernate/tags/RELEASE_1_1/ 

Vous avez juste besoin d'une copie du code, donc une caisse de lecture seule sera très bien.

Une fois que vous avez le code, exécutez mvn grails:create-pom -DgroupId=org.grails.plugins à partir de la racine du projet plugin. Cela va générer un POM. Ensuite, vous devrez éditer le POM et changer l'empaquetage en "grails-plugin". Vous devriez également pouvoir supprimer le bloc <executions> de la configuration Grails Plugin. Le POM va maintenant vous permettre de construire et d'empaqueter le plugin Hibernate, mais vous devez tout de même le déployer. Ajoutez donc votre référentiel local à la gestion de la distribution POM et exécutez mvn deploy. Une fois cela fait, vous devriez être capable d'ajouter le plugin comme une dépendance standard dans le POM de votre application.

C'est un travail difficile, mais au moins, vous ne devriez avoir à le faire qu'une seule fois par version du plugin!

+0

BTW, vous avez probablement besoin de la version 1.1 du plugin Maven. –

+0

Peter, merci pour la réponse détaillée. Il semble que ce soit sur la bonne voie, donc j'ai voté, mais je vois cette erreur lors de l'exécution de "mvn deploy" (POM utilise la version 1.1 du plugin) ovy.lang.MissingPropertyException: No such propriété: HibernatePluginSupport pour la classe: HibernateGrailsPlugin à org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap (ScriptBytecodeAdapter.java:49) ... à org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty (AbstractCallSite.java : 240) à HibernateGrailsPlugin. (HibernateGrailsPlugin.groovy: 43) – Drew

0

J'ai été capable de trouver une solution de contournement juste pour démarrer.

Cela nécessite que Grails soit installé localement et que GRAILS_HOME soit défini. Il effacera et remplira alors le dossier "plugins" du projet pendant la phase de "validation" de Maven. (Insérez ceci dans le POM ci-dessus.)

<plugins> 
    <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
       <phase>validate</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
       <configuration> 
        <tasks> 
         <!-- clear out this project's plugins folder if it exists, otherwise you will get prompted to upgrade it after re-building --> 
         <delete dir="${basedir}/plugins/" includeemptydirs="true"/> 
        </tasks> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <groupId>org.grails</groupId> 
     <artifactId>grails-maven-plugin</artifactId> 
     <version>1.0</version> 
     <extensions>true</extensions> 
     <executions> 
      <execution> 
       <id>create plugins folder</id> 
       <phase>validate</phase> 
       <goals> 
        <goal>install-plugin</goal> 
       </goals> 
       <configuration> 
       <pluginUrl>${env.GRAILS_HOME}/plugins/grails-hibernate-1.1.zip</pluginUrl> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 
Questions connexes