Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 446
SunLiWei Avatar asked Nov 03 '10 10:11

SunLiWei


People also ask

What is Maven target directory?

The target directory is used to house all output of the build. The src directory contains all of the source material for building the project, its site and so on. It contains a subdirectory for each type: main for the main build artifact, test for the unit test code and resources, site and so on.

How do we create project structure in Maven?

Let's open the command console, go to the C:\MVN directory and execute the following mvn command. Make sure that C:\MVN directory is empty before running the command. Maven will start processing and will create the complete java application project structure.

What directory are build artifacts placed in by Maven?

Maven's local repository is a directory on the local machine that stores all the project artifacts. When we execute a Maven build, Maven automatically downloads all the dependency jars into the local repository. Usually, this directory is named . m2.


2 Answers

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.

like image 139
dogbane Avatar answered Oct 22 '22 10:10

dogbane


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> 
like image 31
Denis Kniazhev Avatar answered Oct 22 '22 09:10

Denis Kniazhev