2010-11-03 10 views
31

Estoy usando maven-exec-plugin para generar fuentes Java de Thrift. Invoca el compilador Thrift externo y usa -o para especificar el directorio de salida, "target/generated-sources/thrift".crear directorio cuando sea necesario en maven

El problema es que ni maven-exec-plugin ni Thrift compiler crean automáticamente el directorio de salida, tengo que crearlo manualmente. ¿Hay una forma decente/portátil de usar crear directorios faltantes cuando sea necesario? No quiero definir un comando mkdir en pom.xml, ya que mi proyecto debe ser independiente del sistema.

Respuesta

26

En lugar del plugin de ejecución, utilice el plugin antrun para crear el primer directorio y luego invocar el compilador de segunda mano.

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>generate-sources</id> 
     <phase>generate-sources</phase> 
     <configuration> 
     <tasks> 
      <mkdir dir="target/generated-sources/thrift"/> 
      <exec executable="${thrift.executable}"> 
      <arg value="--gen"/> 
      <arg value="java:beans"/> 
      <arg value="-o"/> 
      <arg value="target/generated-sources/thrift"/> 
      <arg value="src/main/resources/MyThriftMessages.thrift"/> 
      </exec> 
     </tasks> 
     </configuration> 
     <goals> 
     <goal>run</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

También es posible que desee echar un vistazo a la maven-thrift-plugin.

+0

buena solución, pero alguien sabe uno sin antRun ? De vez en cuando tengo que construir varias veces, porque esto no funciona de alguna manera (¿Tal vez Maven 3.1.1?) – Adrian

+0

' generar-fuentes' no es necesario. PD lo único que me gusta de Maven es la gestión de la dependencia. –

+0

@Adrian Vea esta solución antrun-less: https://stackoverflow.com/a/40674535/363573 – Stephan

15

Puede definir una tarea ant para hacer el trabajo. Coloque la declaración plugin en el pom.xml de su proyecto. Esto mantendrá su proyecto independiente del sistema:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>createThriftDir</id> 
        <phase>process-resources</phase> 
        <configuration> 
         <tasks> 
          <delete dir="${thrift.dir}"/> 
          <mkdir dir="${thrift.dir}"/> 
         </tasks> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
4

Si desea preparar tal estructura de carpetas en algún lugar de su proyecto y luego copiar al lugar que desee, plug-in de uso experta en recursos para hacer eso:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>copy-folder</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}</outputDirectory> 
       <resources> 
        <resource> 
        <filtering>false</filtering> 
        <directory>${project.basedir}/src/main/resources/folders</directory> 
        </resource> 
       </resources> 
      </configuration> 
    </execution> 
    </executions> 
</plugin> 
Cuestiones relacionadas