2010-11-03 10 views
31

J'utilise maven-exec-plugin pour générer des sources java de Thrift. Il appelle le compilateur externe Thrift et utilise -o pour spécifier le répertoire de sortie, "target/generated-sources/thrift".créer un répertoire si nécessaire dans maven

Le problème n'est ni maven-exec-plugin ni le compilateur Thrift créer automatiquement le répertoire de sortie, je dois le créer manuellement. Existe-t-il un moyen décent/portable de créer des répertoires manquants en cas de besoin? Je ne veux pas définir une commande mkdir dans le fichier pom.xml, car mon projet doit être indépendant du système.

Répondre

26

Au lieu du plugin exec, utilisez le plugin antrun d'abord créer le répertoire, puis appeler le compilateur Thrift.

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

Vous pouvez également jeter un oeil à la maven-thrift-plugin.

+0

bonne solution, mais ce que quelqu'un connaît un sans antrun ? De temps en temps je dois construire plusieurs fois, parce que cela ne fonctionne pas en quelque sorte (Peut-être Maven 3.1.1?) – Adrian

+0

' générer des sources' pas nécessaire. P.S. La seule chose que j'aime chez Maven, c'est la gestion des dépendances. –

+0

@Adrian Voir cette solution sans antrun: https://stackoverflow.com/a/40674535/363573 – Stephan

15

Vous pouvez définir une tâche de fourmis pour effectuer le travail. Mettez la déclaration plugin dans le fichier pom.xml de votre projet. Cela permet de garder votre système indépendant projet:

 <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 vous souhaitez préparer la structure tel dossier quelque part dans votre projet, puis copier placer que vous voulez, le plugin Maven-ressource pour le faire:

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