Подтвердить что ты не робот

Можно ли запустить из Maven bash script?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

Будет выглядеть больше:

<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}"

Ответ 4

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

Ответ 5

Используйте артефакт 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>

Ответ 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>

Ответ 7

Для экспериментов с командами вы можете использовать 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