Можно ли запустить bash-скрипт из Maven? - PullRequest
23 голосов
/ 08 декабря 2011

Для создания конфигурации моего приложения мне нужно запустить скрипт bash.Возможно ли интегрировать выполнение скриптов bash в Maven, может быть есть какие-то плагины?Спасибо.

Ответы [ 7 ]

19 голосов
/ 05 мая 2013

Может ли 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.

Как и Константин: когда вы выполняете скрипт оболочки, вы больше не переносимы.

14 голосов
/ 08 декабря 2011

Вы можете сделать это, см. Ответ:

Я хочу выполнить команды оболочки из pom.xml maven

Но это не рекомендуется, так как это производит не очень портативные сборки. Зачем вам это нужно в первую очередь? Использование этого плагина обычно указывает на некоторую странную необходимость в сборке проекта

4 голосов
/ 30 октября 2015

будет выглядеть как:

<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}"
2 голосов
/ 21 сентября 2017

решаемая. Проблема в том, что исполняемый файл для 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>
2 голосов
/ 16 августа 2015

Использовать артефакт maven-antrun-plugin. Таким образом, вы можете последовательно выполнить несколько исполняемых файлов проще, чем exec-maven-plugin Пример:

* Здесь важен тег <exec>.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <configuration>
                <tasks>
                    <exec executable="my1.sh">
                        <arg value="input1"/>
                    </exec>
                    <exec executable="my2.sh">
                        <arg value="input2"/>
                    </exec>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>
1 голос
/ 04 июня 2014

Если это вообще возможно, я бы рекомендовал использовать язык сценариев, который работает внутри JVM с зависимостями, которые фиксируются либо в вашем проекте, либо в репозитории maven.Таким образом, ваши сборки не зависят от платформы, а ваши зависимости фиксируются (т.е. вы не теряете сборочную машину и не понимаете, что ваш bash-скрипт был специфичен для этого блока).Я показал в этом посте пример использования jacl.Есть также хорошие примеры использования javascript и groovy внутри antrun (хотя могут быть и более простые способы их прямого вызова).

0 голосов
/ 05 декабря 2017

Для экспериментов с командами вы можете использовать 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
  • -q, чтобы закрыть журнал mvn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...