Maven exec plugin - Executing a python script

SpikETidE picture SpikETidE · Dec 20, 2012 · Viewed 18.7k times · Source

I am using maven on Win 7 to build an application. I use the exec plugin to invoke a python script.

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <id>create-dir</id>
                <phase>process-classes</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <executable>src/main/upgrade/create.py</executable>
            <arguments>
                <argument>ChangeSet.txt</argument>
            </arguments>
        </configuration>
    </plugin>

I get the below error when I build the project.

Embedded error: Cannot run program "pathToScript/create.py" CreateProcess error=193, %1 is not a valid Win32 application

I do have python installed and added to the %PATH variable.

How do I fix it such that it will work independent of OS platform ?

.:-EDIT-:.

WORKING CODE SNIPPET

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <executions>
            <execution>
                <configuration>
                    <executable>python</executable>
                    <workingDirectory>src/main/upgrade/</workingDirectory>
                    <arguments>
                        <argument>createChangeSet.py</argument>
                    </arguments>    

                </configuration>
                <id>python-build</id>
                <phase>prepare-package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

Answer

Ryan Stewart picture Ryan Stewart · Dec 24, 2012

In Windows, the script isn't executable. The executable is the python interpreter, and the script is an argument to it, so put <executable>path to your python interpreter</executable> and add the script as an <argument>. I expect the same should work for any platform, but I'm no Python expert.