Не удалось передать аргументы внутренней команде maven-exec-plugin

Я пытаюсь использовать maven-exec-plugin для запуска команды ejbdeploy для моего старого проекта, созданного с помощью EJB 2.1

Дело в том, что одним из аргументов команды является другая команда (RMIC), которая также имеет аргументы, которые мне нужно использовать.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>ejb-deploy</id>
            <phase>package</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>ejbdeploy</executable>
                    <arguments>
                        <argument>${project.build.directory}\${project.build.finalName}.jar</argument>
                        <argument>${project.build.directory}\working</argument>
                        <argument>${project.build.directory}\${project.build.finalName}-deployed.jar</argument>
                        <argument>-rmic "-d C:\java\classes"</argument>
                        <argument>-cp</argument>
                        <classpath/>
                    </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

Этот фрагмент генерирует ошибку во время моего mvn clean install:

[INFO] --- exec-maven-plugin:1.5.0:exec (ejb-deploy) @ SIMBOLight ---
Unrecognized option: -rmic -d.
Unrecognized option: C:\java\classes.
Error: Must specify the input JAR/EAR filename, the working directory, and output JAR/EAR filename.
0 Errors, 0 Warnings, 0 Informational Messages

Как будто я неправильно форматирую свои параметры. Есть идеи?

1 ответ

Решение

При передаче аргументов с exec-maven-plugin, вы должны убедиться, что каждый <argument> не содержат неэкранированных пробелов Каждый аргумент должен быть представлен как отдельный <argument>,

В твоем случае, -rmic "-d C:\java\classes" на самом деле состоит из 2 аргументов: первый -rmic а второй "-d C:\java\classes" (который содержит пробел), поэтому вы не можете передать их в один <argument>,

Таким образом, вы можете иметь следующую конфигурацию:

<arguments>
  <argument>${project.build.directory}\${project.build.finalName}.jar</argument>
  <argument>${project.build.directory}\working</argument>
  <argument>${project.build.directory}\${project.build.finalName}-deployed.jar</argument>
  <argument>-rmic</argument>
  <argument>"-d C:\java\classes"</argument>
  <argument>-cp</argument>
  <classpath />
</arguments>

Когда настроено с этими аргументами, main метод запущенного исполняемого файла примет -rmic в качестве 3-го элемента в массиве аргументов, и -d C:\java\classes в качестве 4-го элемента в массиве аргументов.

Другие вопросы по тегам