Добавление параметров командной строки в плагин maven exec

Я пытаюсь запустить java-программу с помощью плагина maven exec, используя цель exec: exec.
Мне нужно добавить дополнительную банку в путь к классам (банку инструментов sun).
Поскольку includePluginDependencies работает только для цель exec: java Я подумал добавить ее вручную в раздел аргументов, но не смог найти способ связать ее с базовым путем к классам. Проблема в том, что, поскольку jar определяется как системная область, maven не будет добавлять его в путь к классам времени выполнения, и мне нужно добавить его вручную.
Если кто-то знает, как это сделать из командной строки, это еще лучше . Заранее спасибо,
Авнер

  • Вы можете увидеть раздел плагинов ниже

            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <dependencies>
                <dependency>
                    <groupId>com.sun</groupId>
                    <artifactId>tools</artifactId>
                    <scope>system</scope>
                    <systemPath>${JDK_HOME}/lib/tools.jar</systemPath>
                </dependency>
                <dependency>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>myArtifact</artifactId>
                    <version>1.0</version>
                </dependency>
            </dependencies>
            <configuration>
                <executable>java</executable>
                <arguments>
                    <argument>-classpath</argument>
                    <classpath/>                        
                    <argument>com.mycompany.MyMainClass</argument>
                </arguments>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    

person Avner Levy    schedule 31.07.2012    source источник
comment
Мне пришлось решить почти эту точную проблему, но моя конфигурация была очень похожа на вашу (<classpath/>). Мне непонятно, что вы имеете в виду, говоря об объединении его с базовым путем к классам. Вы имеете в виду путь к классам загрузки? Не могли бы вы предоставить фрагмент результатов сборки и описать конечную цель?   -  person noahlz    schedule 07.09.2012
comment
Моя цель состояла в том, чтобы запустить мою java-программу с путем к классам времени выполнения, вычисленным maven, при добавлении к нему tools.jar. Поскольку инструменты определены как системная область, они не добавляются в путь к классам времени выполнения, рассчитанный maven. В конце концов я решил использовать maven-antrun-plugin.   -  person Avner Levy    schedule 09.09.2012


Ответы (3)


Попробуйте добавить

<argument>-Xbootclasspath/a:${env.JAVA_HOME}/lib/tools.jar</argument>

В командной строке добавьте

-Dexec.args="-Xbootclasspath/a:$JAVA_HOME/lib/tools.jar"

Другой вариант - объявить tools.jar как системную зависимость, а затем установить для области действия плагина exec значение «system». См. exec-maven-plugin - classpathScope

person noahlz    schedule 07.09.2012
comment
Поскольку у меня больше нет настройки, я не могу ее проверить, но я пометил ее как ответ, так как это похоже на правильное направление. - person Avner Levy; 12.09.2012
comment
Я действительно пробовал направление системного пути к классам, но дело в том, что вам нужно выбирать между путем к классам времени выполнения и путем к системным классам, и система не включает среду выполнения (я думаю) - person Avner Levy; 13.09.2012
comment
stackoverflow.com/ questions / 5286279 / - person noahlz; 13.09.2012
comment
-Xbootclasspath / a: $ JAVA_HOME / lib / tools.jar у меня не работал. Не важно. - person gonella; 24.11.2016
comment
Вы на окнах? - person noahlz; 24.11.2016
comment
можно ли добавить каталог вместо одного файла jar? - person Lei Yang; 08.11.2019

В конце концов я решил использовать maven-antrun-plugin, так что вот возможное альтернативное решение.

<configuration>
<target>
    <property name="runtime_classpath" refid="maven.runtime.classpath"/>

    <java classname="com.mycompany.MyClass"
            fork="true"
            spawn="false"
            failonerror="true"
            maxmemory="512m" >

        <classpath>
            <pathelement path="${runtime_classpath}" />
            <pathelement path="${JDK_HOME}/lib/tools.jar" />
        </classpath>
        <arg value="${ant.param1}" />
        <arg value="${ant.param2}" />
        <arg value="${ant.param3}" />
        <arg value="${ant.param4}" />
        <arg value="${ant.param5}" />
    </java>
</target>
</configuration>
person Avner Levy    schedule 09.09.2012
comment
Я до сих пор не понимаю, чем это отличается от исходного вопроса или какую проблему вы на самом деле пытаетесь решить. - person noahlz; 09.09.2012
comment
Как вы можете видеть выше, мне нужно запустить java-класс с большим списком зависимостей, который рассчитывается maven (путь к классам времени выполнения). Я ищу способ добавить jar (tools.jar) к рассчитанному maven пути к классам и использовать его для запуска моего класса java. В приведенном выше примере вы можете видеть, что в плагине antrun вы можете объединить вычисленный путь к классам среды выполнения maven с дополнительными jar-файлами. Если у вас есть простой способ сделать это с помощью плагина maven exec, не стесняйтесь поделиться. - person Avner Levy; 12.09.2012
comment
Обновил мой ответ, предлагая использовать -Dexec.classpathScope="system" - person noahlz; 12.09.2012

Вы можете попробовать установить переменную среды CLASSPATH.

person gkamal    schedule 06.09.2012
comment
Я думаю, что переменная CLASSPATH переопределяется аргументом -classpath, переданным исполняемому файлу java. OP требуется этот путь к классам, сгенерированный Maven, для сборки зависимостей проекта. Я все равно мог бы попробовать. - person Jesse Hallett; 06.09.2012