`
rysh0818
  • 浏览: 23859 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

关于Eclipse中一个错误排查总结

 
阅读更多

今天在进行代码集成测试的时候,对集成测试的java代码进行 run-Junit Test,本来应该console应该打印出来运行信息的

111

但是实际console打印出来的如下图所示:

222

个人觉得相当好奇,但是在同一个workset的里面的其他工程就没有问题

根据eclipse的运行原理,其实run-junit Test 就是 执行javaw –classpath ***/**.jar ***/***/Test 类似的命令 和run-application 其实是一样的。那么就写了添加了一个main方法,期望应该是一样的结果,果真运行run-application之后,console显示的结果和上面的一样

开始觉得是eclipse的问题或者修改过代码的问题,重新下载了代码和新的eclipse结果都还是一样,后来又确认了jvm的版本,全部都是用jdk1.6.0_31的版本,以前的版本都删除了,但是还是一样的问题。

在推理,发现workset的其他工程里面的代码都是可以运行的,发现估计和eclipse和jvm没有太大的关系。联想到这个工程依赖的jar包很多,是不是和这个有关。先删除了部分依赖的jar包(删除了一半),在运行程序,发现没有报以上错误了。觉得问题可能出现在这里。 初步怀疑是不是classpath太长,导致javaw 命令无法执行。

我们所有的功能依赖jar都是通过mvn管理的,默认mvn仓库是c:\documents and settings\用户名\repository里面, 所以每一个依赖的jar包,都有这个前缀,我先减少这个前缀尝试一下,所以就把默认的repo目录指向了d:\repo目录,重新编译执行依赖,刷新eclipse代码,再次执行run-application,发现程序正常运行。后来为了验证我的猜测,写了一段代码进行验证:

public class Test {
	public static void main(String[] args) throws Exception {
		StringBuilder sb = new StringBuilder();
		sb.append("javaw ");
		sb.append("-classpath ");
		//构造长的路径classpath
		for (int i = 0; i < 1000; i++) {
			sb.append("D:/repo/log4j/log4j/1.2.13/log4j-1.2.13.jar,");
		}
		sb.deleteCharAt(sb.length() - 1);
		sb.append(" com.company.test.Test");
		System.out.println(sb.toString());
		//执行命令
		Process process = Runtime.getRuntime().exec(sb.toString());
		//打印结果
		List<String> list = IOUtils.readLines(process.getInputStream());
		for (String s : list) {
			System.out.println(s);
		}
	}
}

运行这段代码,应该打印出来的结果和上面一样,结果如下,符合我的猜测

Usage: javaw [-options] class [args...]
           (to execute a class)
   or  javaw [-options] -jar jarfile [args...]
           (to execute a jar file)

where options include:
    -client	  to select the "client" VM
    -server	  to select the "server" VM
    -hotspot	  is a synonym for the "client" VM  [deprecated]
                  The default VM is client.
                  
    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A ; separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose[:class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  require the specified version to run
    -showversion  print product version and continue
    -jre-restrict-search | -jre-no-restrict-search
                  include/exclude user private JREs in the version search
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                    see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument
    -splash:<imagepath>
                  show splash screen with specified image

我们把命令打印出来,copy到cmd命令行里面执行,发现命令行不完整,被自动截取了

3333

这个命令根本都不完整,后面指令的class丢失了,javaw参数中没有指定要运行的类,就导致我们看到的结果。

这个可能是windows下,和shell指令的长度限制有关。

分享到:
评论

相关推荐

    Eclipse查看class文件

    总之,jadClipse是Eclipse中一个非常实用的工具,它使得开发者能够在不拥有原始源代码的情况下,也能对class文件进行有效的分析和调试。通过熟练掌握jadClipse的使用,你可以在遇到问题时快速定位和解决,从而提升...

    实验一:Eclipse平台及程序调试技术.docx

    2. **透视图(Perspectives)**:透视图是Eclipse中一种组织和显示不同工具集的方式,根据你的工作需求,它可以定制显示相应的视图和编辑器。例如,Java透视图主要服务于Java开发,包含源代码编辑器、包浏览器、问题...

    findbug插件自动排查简单bug.rar

    总的来说,FindBugs插件是Java开发中一个非常有价值的工具,通过自动排查简单的代码bug,它可以帮助团队提高代码质量,减少调试时间,从而提升整体开发效率。同时,随着技术的发展,FindBugs的后续版本和类似工具...

    Tomcat插件

    【标题】:Tomcat插件 ...总之,Tomcat插件是Eclipse中一个不可或缺的工具,它简化了开发者与Tomcat服务器的交互,提高了开发效率。理解并熟练使用这个插件,能够帮助开发者更好地管理和调试基于Tomcat的Java Web应用。

    myeclipse 2014 customize persperctive 无法 打开 修复

    这个问题通常会给开发者带来不便,因为自定义透视图是MyEclipse中一个非常重要的特性,它允许用户根据个人工作习惯或项目需求调整IDE的工作环境布局。本文将深入探讨这个问题的原因以及修复方法。 首先,我们要理解...

    java反编译工具jad

    2. 将jad.exe(在提供的压缩包中)放置在系统路径中一个方便的位置,确保Eclipse插件可以访问到。 3. 安装JadClipse插件到Eclipse,可以通过Eclipse的“Help” &gt; “Install New Software”菜单完成,然后添加插件的...

    ssh整合简单示例(myeclipse工程)

    SSH整合是Java开发中一种常见的Web应用程序架构模式,它由...然而,整合过程中的配置和错误排查需要一定的经验和技巧,这也是学习SSH整合的重要环节。通过不断地实践和理解,你可以更好地掌握这些框架,提高开发效率。

    整理-JVM相关面试题2024

    JVM是Java开发中一个非常重要的概念,理解其内部机制对于提高应用程序的性能和稳定性至关重要。通过以上知识点的学习,你可以更好地准备JVM相关的面试问题,并能够更加深入地理解JVM的工作原理。

    enunciate-example-cxf-osgi:旨在重现说明性的Java编译器失败的示例

    Apache CXF是Java中一个著名的Web服务框架,它允许开发者构建和使用符合多种Web服务标准的服务。OSGI(Open Service Gateway Initiative)则是一个模块化系统,用于Java应用程序,它提供了动态模块化的能力,使得...

Global site tag (gtag.js) - Google Analytics