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

use*_*818 24 bash maven

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

Adr*_*ien 19

可以在猛砸Maven插件帮助你吗?(免责声明:我发起了,所以请给我反馈)

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Jared 1. 因为在 Bash 中编写它有时比在 Maven/AntRun 中快 30 倍(一个原因是,我们可以从命令行运行 Bash 脚本,而我们不能在 Maven 中运行单个执行 ID);2. 因为使用 maven-exec-plugin 运行 bash 脚本会将代码移动到另一个文件,这不利于 pom.xml 的清晰度。**然而**,如果人们继续坚持编写可移植 pom.xml 文件的最佳实践会更好,所以如果他们坚持使用 maven-antrun-plugin 是好的。 (3认同)
  • @Adrien这不是Maven的设计方式,我相信:)插件/工件的作者应该将它部署到Maven Central并让别人从那里使用它 (3认同)
  • @Adrien 为什么?为什么?为什么?为什么要用 Bash 脚本污染 pom.xml?为什么要通过调用 bash 使构建不可移植(如果可以避免的话)?为什么如果您确实必须在 Linux 系统上调用 bash,您不只是在 src/main/scripts/ 中的脚本上使用 maven-exec-plugin 吗?我没有看到你的 Bash maven 插件被广泛使用(也许你只是为了学习体验而写它......好吧,但不要推荐其他人使用它)。也许您可以解释为什么它比其他选项更好? (2认同)
  • @yegor256 这就是开源的设计方式:最有动力的人为每个人改善事物(并获得荣誉)。顺便说一句,我不再在 Atlassian 了,所以无论如何我都必须分叉插件,所以如果你这样做会更好。 (2认同)

Kon*_*uda 14

你可以这样做,看看答案:

我想从maven的pom.xml执行shell命令

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

  • 同意.如果你真的需要在POM中进行自定义配置,可以考虑使用基于java的脚本,比如Groovy(更便携)http://docs.codehaus.org/display/GMAVEN/Executing+Groovy+Code (2认同)
  • @ MarkO'Connor gmaven已经停产(大概就是你的评论). (2认同)

小智 6

看起来更像:

<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>
Run Code Online (Sandbox Code Playgroud)

使用myFirst.sh:

echo "call to myFirst.sh, message ${1}"
Run Code Online (Sandbox Code Playgroud)


小智 6

解决了。问题是,可执行文件在 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>
Run Code Online (Sandbox Code Playgroud)