Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use maven-exec-plugin to run command line

I want to use maven-exec-plugin to run command line (cmd) for converting a Markdown file to a PDF file using Pandoc.

To do that manually, I've executed these commands:

pandoc ReadMe.md -o ReadMe.html
pandoc ReadMe.html --latex-engine=xelatex -o ReadMe.pdf

I wasn't able to run that in one command, pandoc giving weird error! But this is another problem...

I've added this to my pom file using other sample found on the web but without success.

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <id>pandoc</id>
                    <phase>generate-pdf</phase>
                    <configuration>
                        <executable>cmd</executable>
                        <workingDirectory></workingDirectory>
                        <arguments>
                            <argument>/C</argument>
                            <argument>pandoc</argument>
                            <argument>README.md</argument>
                            <argument>-o</argument>
                            <argument>README.html</argument>
                        </arguments>
                    </configuration>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>                            
            </executions>
        </plugin>   
    </plugins>
</build>

I'm not a maven guru and help is appreciate!

like image 394
Jonathan Anctil Avatar asked Dec 02 '15 19:12

Jonathan Anctil


1 Answers

The defined phase, <phase>generate-pdf</phase>, is not a maven phase, hence Maven didn't bind the execution to its workflow.

You should bind it to a standard Maven phase, depending on your need. Try <phase>package</phase> for instance, it will be executed nearly at the end of your build.

The id element of a plugin execution is free text, you can type the id you want, it will appear as part of the build output in curved brackets after the plugin and goal name,

i.e. exec-maven-plugin:1.1:exec (pandoc)

The phase element instead must match a well known maven phase in order to attach the plugin/goal execution to it. If the phase is not well known, then Maven will simply ignore that plugin/goal execution (which is also an adopted approach, usually using the de-facto standard none as phase, to disable an inherited plugin execution, but that's a bit advanced for the scope of this question I would say).

For more details on maven phases, look at the official documentation, here. For a full list of maven phases, here.

like image 140
A_Di-Matteo Avatar answered Sep 26 '22 13:09

A_Di-Matteo