【问题标题】:Adding command line parameters to maven exec plugin将命令行参数添加到 maven exec 插件
【发布时间】:2012-07-31 08:22:26
【问题描述】:

我正在尝试使用 exec:exec 目标使用 maven exec 插件运行 java 程序。
我需要在类路径中添加一个额外的 jar(sun 工具 jar)。
由于 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>
    

【问题讨论】:

  • 我不得不解决几乎这个确切的问题,但我的配置看起来很像你的 (&lt;classpath/&gt;)。我不清楚“将其连接到基类路径”是什么意思。你的意思是“引导”类路径?您能否提供构建输出的 sn-p 并描述您的最终目标?
  • 我的目标是使用 maven 计算的运行时类路径运行我的 java 程序,同时将 tools.jar 添加到其中。由于这些工具被定义为系统范围,因此它不会添加到 maven 计算的运行时类路径中。最终我决定使用 maven-antrun-plugin。

标签: maven maven-plugin


【解决方案1】:

最终我决定使用 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>

【讨论】:

  • 我仍然不明白这与原始问题有何不同,或者您实际上要解决什么问题。
  • 正如您在上面看到的,我需要运行一个 java 类,该类具有由 maven(运行时类路径)计算的大型依赖项列表。我正在寻找一种将jar(tools.jar)添加到maven构建的计算类路径并将其用于运行我的java类的方法。在上面的示例中,您可以看到在 antrun 插件中,您可以将计算出的 maven 运行时类路径与其他 jar 连接起来。如果您有使用 maven exec 插件的简单方法,请随时分享。
  • 更新了我的回答,建议使用-Dexec.classpathScope="system"
【解决方案2】:

尝试添加

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

在命令行中添加

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

另一种选择是将 tools.jar 声明为系统依赖项,然后将 exec 插件范围设置为“系统”。见:exec-maven-plugin - classpathScope

【讨论】:

  • 因为我没有设置了,所以我无法检查它,但我已将其标记为答案,因为它看起来是正确的方向。
  • 我实际上已经尝试过系统类路径方向,但问题是您需要在运行时类路径和系统类路径之间进行选择,并且系统不包含运行时(我认为)
  • -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar 对我不起作用。没关系。
  • 你在windows上吗?
【解决方案3】:

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

【讨论】:

  • 我认为 CLASSPATH 变量被赋予 java 可执行文件的 -classpath 参数覆盖。 OP 需要 Maven 生成的类路径来组装项目依赖项。不过我还是可以试一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 2018-03-07
  • 2012-11-02
  • 2015-02-14
相关资源
最近更新 更多