2016-07-14 7 views
1

Ich sage es sofort: Ich habe nie mit Maven/Groovy gearbeitet, aber vor kurzem bekam ich den Job, ein Skript zu schreiben, das automatisch eine Enum aus einer .properties-Datei erstellt .Keine solche Eigenschaft: pom für Klasse: Script1

Ich benutze das GMavenPlus Plugin dafür. Ich habe das Skript bereits nach der Antwort auf this Frage geschrieben. Der Grund, warum ich nicht die gleiche Pom wie in der Antwort verwenden kann, ist, weil es GMaven verwendet, die eingestellt wurde.

Jetzt, wenn ich versuche, es zu laufen über cmd ich den Fehler

Failed to execute goal org.codehaus.gmavenplus:gmavenplus-plugin:1.5:execute <create-enum> on project gui: Error occurred while calling a method on a Groovy class 
from classpath. InvocationTargetException: No such property: pom for class: Script1 -> [Help 1] 

bekommen Und hier sind die wichtigen Teile meines pom.xml:

  <plugin> 
      <groupId>org.codehaus.gmavenplus</groupId> 
      <artifactId>gmavenplus-plugin</artifactId> 
      <version>1.5</version> 

      <executions> 
       <execution> 
        <id>create-enum</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>execute</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <scripts> 
        <script><![CDATA[ 
        import java.io.File 
        import com.cclsd.gdg.client.EnumGenerator 

        File dir = new File(pom.basedir, 
         "src/main/resources/com/cclsd/gdg/client") 

        new EnumGenerator(
         new File(pom.build.directory, 
          "generated-sources/enums"), 
         new File(dir, 
         "properties/config.properties"), 
         new File(dir, 
          "EnumTemplate.txt"), 
         "com.cclsd.gdg.client.data", 
         "PropertyEnum" 
         ) 
       ]]></script> 
       </scripts> 
      </configuration> 

      <dependencies> 
       <dependency> 
        <groupId>org.codehaus.groovy</groupId> 
        <artifactId>groovy-all</artifactId> 
        <!-- any version of Groovy \>= 1.5.0 should work here --> 
        <version>2.4.7</version> 
        <scope>runtime</scope> 
       </dependency> 
      </dependencies> 
     </plugin> 
    </plugins> 
    <pluginManagement> 
     <plugins> 
      <!--This plugin's configuration is used to store Eclipse m2e settings 
       only. It has no influence on the Maven build itself. --> 
      <plugin> 
       <groupId>org.eclipse.m2e</groupId> 
       <artifactId>lifecycle-mapping</artifactId> 
       <version>1.0.0</version> 
       <configuration> 
        <lifecycleMappingMetadata> 
         <pluginExecutions> 
          <pluginExecution> 
           <pluginExecutionFilter> 
            <groupId> 
             org.codehaus.gmavenplus 
            </groupId> 
            <artifactId> 
             gmavenplus-plugin 
            </artifactId> 
            <versionRange> 
             [1.0.0,) 
            </versionRange> 
            <goals> 
             <goal>execute</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <execute> 
             <runOnIncremental>false</runOnIncremental> 
            </execute> 
           </action> 
          </pluginExecution> 
         </pluginExecutions> 
        </lifecycleMappingMetadata> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

Hinweis : Alles unter dem pluginmanagement-Tag, das ich von the official m2e site bekommen habe, sollte dazu führen, dass das Skript in der generate-sources-Phase

ausgeführt wird 0

Ich brauche wirklich jemanden, der mir hier hilft, ich konnte buchstäblich keine einzige Sache auf Google über diesen Fehler finden. Auch ein umfassendes Tutorial über das Ausführen von Skripten in Maven wäre schön.

Haben Sie einen schönen Tag ~ Crowley

Edit: es zeigt auch die Warnung Der POM für ungültig ist, transitiv Tendenzen (falls vorhanden) nicht zur Verfügung, die Debug-Protokollierung für mehr Details

Antwort

1

Sie sind aktivieren Zugriff auf eine pom-Eigenschaft in Ihrem Skript, die nicht vom gmaven-Plugin bereitgestellt wird. In dieser Art von Skript können Sie eine project Eigenschaften verwenden, die eine Instanz von MavenProject ist.

Zum Beispiel:

File dir = new File(project.basedir, "src/main/resources/com/cclsd/gdg/client") 
+0

Nun, das ist demütigend. Jedenfalls danke für die schnelle Antwort :) –