美文网首页
Java开发中一些编译测试问题 之一

Java开发中一些编译测试问题 之一

作者: WeiminSun | 来源:发表于2017-12-27 09:24 被阅读0次

    在项目中遇到一个奇怪的现象,一个单元测试(Junit)在IDE中可以执行正确,但是使用Maven Test得不到正确结果。

    1. 问题

    经过一阵子的调试跟踪发现了问题所在。
    假设测试在B模块中,但是依赖了A模块的方法a。B模块的单元测试b使用了a, a的初始化要使用A.jar包内的资源文件。
    在IDE中,a是可以正确的找到A.jar的资源的。但是在Maven Test是找不到,所以初始化失败。

    2. 分析

    初步分析应该是IDE和MAVEN入口不一样。
    IDE启动的是直接java 命令,命令中已经给那些依赖的jar 添加到了classpath 中了,
    Maven surefire, 如果那个参数没打开的话,就只会设置jvm的classpath 做为参数。

    其实这个surefire 2.4 引入的。如果maven 退回到2.3或者更早,应该也没问题了。

    3. 解决办法

    加入参数useSystemClassLoader

    <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven-surefire-plugin.version}</version>
                    <configuration>
                        <forkCount>1</forkCount>
                        <reuseForks>false</reuseForks>
                       <useSystemClassLoader>false</useSystemClassLoader>
                    </configuration>
                </plugin>
    

    4. 进一步分析

    对比一下这个参数设置与否的Maven Test Trace.

    1. 不设置

    Forking command line: cmd.exe /X /C ""C:\Program Files\Java\jdk1.8.0_131\jre\bin\java" -jar D:\Work\Touchpiont\Workspace\bda-dataimport\bda-collection-engine\target\surefire\surefirebooter7283450230329668804.jar D:\Work\Touchpiont\Workspace\bda-dataimport\bda-collection-engine\target\surefire\surefire4601787208340921585tmp D:\Work\Touchpiont\Workspace\bda-dataimport\bda-collection-engine\target\surefire\surefire_05380039621346427331tmp"
    
    

    2. useSystemClassLoader = false

    Forking command line: cmd.exe /X /C ""C:\Program Files\Java\jdk1.8.0_131\jre\bin\java" org.apache.maven.surefire.booter.ForkedBooter D:\Work\Touchpiont\Workspace\bda-dataimport\bda-collection-engine\target\surefire\surefire345966431011675942tmp D:\Work\Touchpiont\Workspace\bda-dataimport\bda-collection-engine\target\surefire\surefire_05131872906470095968tmp"
    

    4. 参考

    Surefire ClassLoader

    相关文章

      网友评论

          本文标题:Java开发中一些编译测试问题 之一

          本文链接:https://www.haomeiwen.com/subject/hnuygxtx.html