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.
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.
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.
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.
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 love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With