是否可以从Maven运行bash脚本?

时间:2011-12-08 15:48:52

标签: bash maven

为了创建我的应用程序的配置,我需要运行bash脚本。 是否有可能在Maven中集成bash脚本的执行,也许有一些插件? 感谢。

6 个答案:

答案 0 :(得分:18)

Bash Maven Plugin可以帮到你吗? (免责声明:我发起了,所以请给我反馈意见)

<build>
    <plugins>
        <plugin>
            <!-- Run with:
                mvn bash:run
                mvn install
            -->
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>bash-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <id>test</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <script>
                    # Here you can execute shell commands
                    echo "Tomcat will start"
                    /opt/apache-tomcat/bin/startup.sh
                </script>
            </configuration>
        </plugin>
    </plugins>
</build>

您需要在自己的Maven仓库中安装此maven插件。

与Konstantin一样:当你执行shell脚本时,你就不再可移植了。

答案 1 :(得分:13)

你可以这样做,见答案:

I want to execute shell commands from maven's pom.xml

但这不可取,因为这不会产生可移植的版本。为什么你首先需要这个?使用这个插件通常表明项目构建中有一些奇怪的必要性

答案 2 :(得分:4)

看起来更像是:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>generateSources</id>
            <phase>generate-sources</phase>
            <configuration>
                <tasks>
                    <exec executable="/bin/bash">
                        <arg value="myFirst.sh" />
                        <arg value="inputOne" />
                    </exec>
                    <exec executable="/bin/bash">
                        <arg value="src/mySecond.sh" />
                        <arg value="inputTwo" />
                    </exec>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

使用myFirst.sh:

echo "call to myFirst.sh, message ${1}"

答案 3 :(得分:2)

解决。问题是,可执行文件以不同的方式用于bash。这段代码正在运行。将其写在pom.xml中

    <plugin>
        <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
        <groupId>org.codehaus.mojo</groupId>
        <executions>
            <execution><!-- Run our version calculation script -->
                <id>Renaming build artifacts</id>
                <phase>package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>bash</executable>
            <commandlineArgs>handleResultJars.sh</commandlineArgs>
                </configuration>
            </execution>
        </executions>
    </plugin>

答案 4 :(得分:1)

如果可能的话,我建议使用在JVM中运行的脚本语言,其中包含在项目或maven存储库中捕获的依赖项。这样,您的构建是独立于平台的,并且您的依赖项被捕获(即,您不会松开构建计算机并实现您的bash脚本特定于该框)。我在使用jacl的this post中展示了一个示例。在antrun中使用javascript和groovy也有很好的例子(尽管可能有更简单的方法直接调用它们。)

答案 5 :(得分:0)

要试验命令,您可以使用exec:exec

$ mvn exec:exec -q -Dexec.executable=echo -Dexec.args="your   arguments"
your arguments

$ mvn exec:exec -q -Dexec.executable=echo -Dexec.args="'your   arguments'"
your   arguments

这表明:

  • 传递参​​数:如果你需要传递几个参数:只需用空格分割它们
  • 如果你需要传递一个带空格的参数:用引号括起来,就像你在bash script / terminal中做的那样
  • -q关闭mvn日志