开发者

create directory when needed in maven

I am using maven-exec-plugin to generate java sources of Thrift. It invokes the external Thrift compiler and using -o to specify the output directory, "target/generated-sources/thrift".

The problem is neither maven-exec-plugin nor Thrift compiler automatically create the output directory, I have to manually create it. Is there a decent/portable way use create missing directories when needed? I 开发者_运维知识库don't want to define a mkdir command in the pom.xml, since my project need to be system independent.


Instead of the exec plugin, use the antrun plugin to first create the directory and then invoke the thrift compiler.

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

You may also want to take a look at the maven-thrift-plugin.


You can define an ant task to do the job. Put the plugin declaration into your project's pom.xml. This will keep your project system-independent:

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


If you would like to prepare such folder structure somewhere in your project and then copy to place you want, use maven-resource plugin to do that:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜