Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向maven exec插件添加命令行参数_Maven_Maven Plugin - Fatal编程技术网

向maven exec插件添加命令行参数

向maven exec插件添加命令行参数,maven,maven-plugin,Maven,Maven Plugin,我正在尝试使用maven exec插件运行java程序,使用exec:exec目标。 我需要在类路径中添加一个额外的jar(sun工具jar)。 由于includePluginDependencies只适用于exec:java目标,我想在arguments部分手动添加它,但找不到将其连接到基本类路径的方法。问题在于,由于jar被定义为系统作用域,maven不会将其添加到运行时类路径中,因此我需要手动添加它。 如果有人知道如何从命令行执行,那就更好了。 提前感谢, 阿夫纳 您可以看到下面的插件部

我正在尝试使用maven exec插件运行java程序,使用exec:exec目标。
我需要在类路径中添加一个额外的jar(sun工具jar)。
由于includePluginDependencies只适用于exec:java目标,我想在arguments部分手动添加它,但找不到将其连接到基本类路径的方法。问题在于,由于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>
    
    
    org.codehaus.mojo
    execmaven插件
    1.2.1
    com.sun
    工具
    系统
    ${JDK_HOME}/lib/tools.jar
    ${project.groupId}
    我的神器
    1
    JAVA
    -类路径
    com.mycompany.MyMainClass
    执行官
    

您可以尝试设置CLASSPATH环境变量。

尝试添加

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

另一个选项是将tools.jar声明为系统依赖项,然后将exec插件范围设置为“System”。请参阅:

最终我决定使用maven antrun插件,因此这里有一个可能的替代解决方案

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


我认为CLASSPATH变量被提供给java可执行文件的-CLASSPATH参数覆盖。OP需要Maven生成的类路径来组装项目依赖项。无论如何我都可以尝试一下。我必须解决几乎完全相同的问题,但我的配置与您的非常相似(
)。我不清楚你所说的“连接到基本类路径”是什么意思。你是说“启动”类路径吗?您能提供构建输出的一个片段并描述您的最终目标吗?我的目标是使用maven计算的运行时类路径运行java程序,同时向其添加tools.jar。由于工具被定义为系统作用域,因此它不会添加到maven计算的运行时类路径中。最后,我决定使用maven antrun插件。我仍然不明白这与最初的问题有什么不同,也不明白您实际要解决的问题是什么。正如您在上面看到的,我需要运行一个java类,该类有一个由maven计算的大型依赖项列表(运行时类路径)。我要寻找的是一种将jar(tools.jar)添加到maven构建的计算类路径中并用于运行java类的方法。在上面的示例中,您可以看到,在antrun插件中,您可以将计算出的maven运行时类路径与其他JAR连接起来。如果您使用maven exec插件有一个简单的方法,请随意分享。更新了我的答案,建议使用
-Dexec.classpathScope=“system”
由于我不再有设置,我无法检查它,但我已将其标记为答案,因为它看起来方向正确。我实际上尝试了系统类路径方向,但问题是,您需要在运行时类路径和系统类路径之间进行选择,而系统不包括运行时(我认为)-Xbootclasspath/a:$JAVA_HOME/lib/tools.jar对我不起作用。没关系,你在windows上吗?
<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>