zl程序教程

您现在的位置是:首页 >  后端

当前栏目

在Maven2中运行单个测试用例并添加JVM参数

JVM 运行 参数 添加 测试用例 单个
2023-09-11 14:20:33 时间

都说Maven2是Ant的替代品,今天稍微使用了下Maven,记录备忘。

通过Maven单独运行一个Junit测试用例(无需配置surefire):

mvn -Dtest=TestXXX test

为Maven运行添加JVM参数,比如想给运行Maven的JVM分配更多内存,或者进行profiling等。有两种方法,一种是全局方法,即设置一个全局的环境变量MAVEN_OPTS。

linux下可修改.profile或者.bash_profile文件:export MAVEN_OPTS=-Xmx1024m

windows下可以添加环境变量MAVEN_OPTS

这样对于所有的maven进程都会启用这个JVM参数,所以是一个全局变量,具体可在bin\mvn.bat或者mvn.sh文件中找到如下内容:(%MAVEN_OPTS%即为全局JVM参数)

@REM Start MAVEN2

:runm2

%MAVEN_JAVA_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" org.codehaus.classworlds.Launcher %MAVEN_CMD_LINE_ARGS%

如果有更加specific的需求,比如要单独运行一个JUnit Testcase,并且要fork出一个新的JVM来运行,还要为这个JVM加上特定的参数,那就需要更改项目的pom.xml文件了。具体方法是,修改项目的pom.xml在 build - plugins ,添加一个plugin,目的是配置surefire,使得每运行一个testcase,都单独fork出一个新的JVM来运行,若还要添加JVM参数,则可通过maven.test.jvmargs来进行传递:

plugin
groupId org.apache.maven.plugins /groupId
artifactId maven-surefire-plugin /artifactId
configuration
forkMode pertest /forkMode
argLine ${maven.test.jvmargs} /argLine
/configuration
/plugin

然后在 properties 标签下加入,这样maven能够知道maven.test.jvmargs这个参数存在,默认值为空,通过运行时命令行传入:

deploy.target/
maven.test.jvmargs /maven.test.jvmargs

最后通过如下命令来运行,其中-Dtest是需要运行的testcase的名称,-Dmaven.test.jvmargs指需要传入的JVM参数,maven将这个参数传给新的fork出来的JVM运行。

mvn -Dtest=TestXXX -Dmaven.test.jvmargs=-agentlib:xxxagent -Xmx128m test

   



最新内容请见作者的GitHub页:http://qaseven.github.io/

   


JDK、JRE 和 JVM 有什么用,它们是怎样运行的 以下是JDK的重要组件: • JDK 和 JRE:程序员通过使用JDK 创建由 JRE 运行的 Java 程序,其中包括 JVM 和类库。 • 类库:是一组可动态加载的库,Java 程序在运行时调用。 • 编译器:是一个Java程序,开发人员的文本文件通过编译器编译成Java类文件。编译器给出的常见输出形式,包含Java字节码。在 Java 中,主要的编译器是 Javac。 • 调试器:调试器是一个 Java 程序,开发人员通过调试器测试和调试 Java 程序。 • JavaDoc: JavaDoc 是 Sun Microsystems 为 Java 制作的文档。JavaDoc 可用于从源程序
JVM运行时数据区域学习 5.永久代属于HotSpot,JDK1.8废弃了永久代,取而代之的是Metaspace(元空间),元空间使用的是直接内存,不使用虚拟机内存;4.堆内存 = 新生代(1/3) + 老年代(2/3);1.本地方法栈和虚拟机栈并非所有的JVM都有区分,不是强制规定,HotSpot中本地方法栈和虚拟机栈是合在一起的;6.在HotSpot中字符串常量池在jdk1.8由原来的方法区(永久代)转移到java堆中.2.方法区不等于永久代,HotSpot使用永久代来实现方法区,但在其他的JVM中并不适用;
JVM运行时数据区域 线程私有 唯一一个没有规定 OutOfMemoryError 异常 的区域 它可以看作是当前线程所执行的字节码的行号指示器 如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)
JVM运行时栈帧 在JVM中,每个线程都包含n个栈帧,每一个栈帧都包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。