如何控制 maven-jetty-plugin 的 VM 参数?

Posted

技术标签:

【中文标题】如何控制 maven-jetty-plugin 的 VM 参数?【英文标题】:How to control VM arguments for maven-jetty-plugin? 【发布时间】:2011-01-01 16:58:07 【问题描述】:

如何为从 maven-jetty-plugin 运行的 Jetty 设置 VM 参数?

例如,我需要将-Xmx 参数传递给mvn jetty:run 命令运行的Jetty。

【问题讨论】:

我知道这个问题真的很老了,但你找到解决方案了吗? (我的意思是不为整个 JVM 添加参数,而只为码头添加参数)我认为 Cargo 可以解决问题,但我不想在我的项目中添加其他东西...... 是的,使用 -DargLine... 请参阅下面的答案以获取完整示例 -DargLine 不适用于 jetty:run,它适用于 jetty:run-forked 【参考方案1】:

要通过命令行指定 vm 参数(如最初要求的那样),您可以执行以下操作:

mvn clean install -DargLine="-Xmx1524m" 

【讨论】:

这在什么情况下有效?它是特定于码头的吗?对我来说,它不起作用,而设置 MAVEN_OPT 却起作用。 mvn -DargLine="-Xmx1524m" 全新安装 @cafebabe1991 很高兴您对我的帖子发表评论并突出显示错误(如果有)。不要认为有必要修改我的答案,因为这是我的答案!不知道为什么 *** 会允许修改某人的答案,因为您不喜欢 -D 标志的位置顺序。据我所知,顺序无关紧要。恢复到原来的答案。 @ChrisRitchie 如果我没记错的话 -D 没有被 maven 拾取,除非它按照我指定的顺序。我同意我不应该编辑你的答案。【参考方案2】:

环境变量 MAVEN_OPTS 就是答案。将 MAVEN_OPTS 的字符串内容传递给 JVM (java.exe)。

Linux:在 shell 类型中export MAVEN_OPTS=.... Windows:在 shell (cmd.exe) 中键入 set MAVEN_OPTS=...

例如:在 Windows 上 set MAVEN_OPTS="-Xmx1024m" 将 Maven 进程的堆大小设置为 1024mb。

更新 (01.04.2013):将其直接传递给 Jetty。

Matthew Farwell(请投票his answer 以表扬他的功劳)提供了使用分叉 JVM 进程运行 Jetty 的解决方案,即a new feature of the Jetty plugin。这是一个更好的解决方案,因为前者在与 Maven 相同的 JVM 进程中运行(因此共享内存)。

【讨论】:

不会为整个 JVM 运行设置它吗?有没有办法让它只影响它启动的码头? 是的 - 查看(并投票)来自 Matthew Farwell 的新答案 - 码头插件的新功能可以使用自己的参数在分离的 jvm 中运行码头【参考方案3】:

没有办法使用命令行。但是您可以将mvn.cmd / mvn.sh 复制到mvnhp.cmd 并更改行

%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%

%MAVEN_JAVA_EXE% -Xmx1024m %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%

【讨论】:

【参考方案4】:

你可以使用 -Xmx 参数来传递;

<plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version></version>
            <configuration>
                <jvmArgs>-Xmx -Xms -XX:PermSize= -XX:MaxPermSize= -XX:+HeapDumpOnOutOfMemoryError</jvmArgs>
                <scanIntervalSeconds>1</scanIntervalSeconds>
                <stopKey>stop-jetty</stopKey>
                <stopPort>9999</stopPort>
                <systemProperties>
                    <systemProperty>
                        <name>jetty.port</name>
                        <value>9090</value>
                    </systemProperty>
                    <systemProperty>
                        <name>spring.profiles.active</name>
                        <value></value>
                    </systemProperty>
                </systemProperties>

                <webApp>
                    <contextPath>/</contextPath>
                </webApp>
            </configuration>
        </plugin>

【讨论】:

【参考方案5】:

使用最新版本的 maven-jetty-plugin,您可以使用mvn:run-forked。选项 jvmArgs 将允许您设置 -Xmx 等。

如需了解更多信息,请参阅:jetty:run-forked : Running an unassembled webapp in a separate jvm。

我认为最初的问题是Starting Jetty in separate JVM。

【讨论】:

Jetty 在运行之前组装 WAR 文件的解决方案在我的情况下是一个问题。组装 WAR 文件时,该插件似乎跳过了我在复制和打包 Web 资源时需要的“过滤步骤”。 jetty:deploy-war 目标仅使用预构建的 WAR 文件,但不支持 jvmArgs 参数。 :-( 设置 MAVEN_OPTS env 变量有效,但我必须为我构建的其他应用程序重新设置它。如果我可以通过插件配置设置 JVM 选项,并将该配置与需要它的应用程序保持一致,那就太好了。 【参考方案6】:

这里提到的&lt;jvmArgs&gt; 参数:Maven jetty plugin 对我不起作用。

Maven 版本:Apache Maven 3.0.3

Jetty Maven 插件版本:jetty-maven-plugin:8.1.10.v20130312

这行得通:

MAVEN_OPTS='-Xmx4096m -Xms4096m'
export MAVEN_OPTS
mvn jetty:run &

【讨论】:

【参考方案7】:

该插件允许您像这样指定 jvmArgs:

<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
    <jvmArgs>-Xmx1024</jvmArgs>
    <scanIntervalSeconds>10</scanIntervalSeconds>
    <connectors>
        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <port>8080</port>
            <maxIdleTime>60000</maxIdleTime>
        </connector>
    </connectors>
    <webAppConfig>
        <jettyEnvXml>jetty-env.xml</jettyEnvXml>
    </webAppConfig>
</configuration>
<executions>
    <execution>
        <phase>test</phase>
        <goals>
            <goal>run-exploded</goal>
        </goals>
    </execution>
</executions>
</plugin>

【讨论】:

对我不起作用,我试过:org.mortbay.jettyjetty-maven-plugin8.1.5 .v20120716-Xmx2048M -XX:MaxPermSize=2048m$project.basedir/war$project.basedir /war/WEB-INF/web.xml @davidjnelson 您需要使用jetty:run-forked 目标。请参阅:Matthew Farwell 的上述回答:***.com/a/13388081/19501。 但是当输入的命令是mvn clean install 时,如何让码头以jetty:run-forked 运行?【参考方案8】:

在 Linux/Unix 上

export MAVEN_OPTS="-Xmx256m" && mvn clean install jetty:run

会成功的

【讨论】:

这会留下变量集以供以后执行,这可能不是预期的。【参考方案9】:

您当前的方法似乎是正确的 - 通过 maven 运行 jetty 时,jetty 是 maven 进程中的一个线程。所以增加maven的堆会增加jetty的堆。

你是如何设置 MAVEN_OPTS 的?

我发现的一个例子是这样的:MAVEN_OPTS='-Xmx256m -Xms10m' mvn clean jetty:run

注意MAVEN_OPTS在这里是一个环境变量,而不是传递给JVM(谁不知道怎么处理它)。

【讨论】:

以上是关于如何控制 maven-jetty-plugin 的 VM 参数?的主要内容,如果未能解决你的问题,请参考以下文章

今日出错解决cannot resolve plugin org.mortbay.jetty:maven-jetty-plugin阿里云仓库对应地址没有jetty插件

如何使用由 Maven 坐标定义的战争来运行 jetty:run-war?

idea 中怎么修改jetty的端口号

端口被占用

配置jetty

Maven Jetty插件