`

ant javac Unknown Source 问题

阅读更多
是否觉得下面的异常非常眼熟呢? 
Exception in thread "main" java.lang.RuntimeException
        at Test.main(Unknown Source)
当通过日志文件分析异常原因时,Unknown Source通常比较令人郁闷,郁闷程度与出错方法中行数成正比。 
其实出现Unknown Source的原因是在编译时没有指定相应的选项,具体可以参见javac -g系列参数的帮助。当通过javac编译时,默认相当于指定-g:source,lines,这样编译出来的class文件中会包含源代码和行号信息;而通过ant编译时,默认相当于指定-g:none,这样编译出来的class文件会比较小,但是不包含任何调试信息,所以出错的时候就会打印出上面的错误堆栈信息。 
如果要改变ant javac task的编译效果,可以更改其debug和debuglevel属性,参见:http://ant.apache.org/manual/CoreTasks/javac.html。 
以下列出了用不同的-g参数编译同一java文件并运行的效果: 
-g:none 
Exception in thread "main" java.lang.RuntimeException
        at Test.main(Unknown Source)
-g:source 
Exception in thread "main" java.lang.RuntimeException
        at Test.main(Test.java)
-g:source,lines 
Exception in thread "main" java.lang.RuntimeException
        at Test.main(Test.java:4)
-g:all 或 -g:source,lines,vars 
运行效果等价于-g:source,lines,但是反编译生成的class文件,可以看到局部变量名也能正常的识别出应该根据程序的部署环境来更改编译参数,比如server端的代码应该加上-g:source,lines,以便通过日志文件正确分析。 

ant javac Unknown Source 问题

发表于:2009年3月25日 | 分类:java | 标签: antjavac | views(4,563)

版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原文出处, 即下面的声明.

 

原文出处:http://blog.chenlb.com/2009/03/ant-javac-unknown-source.html

项目中,我一般用ant编译打包,然后放到服务器中运行。但运行时候可能会有错误,抛出异常时看不到代码在几行出问题,这个比较郁闷,还用使用行的javac编译再打包的不会,当然eclipse导出的也不会。还是解决下ant javac Unknown Source的问题吧。

找到几个资源:http://www.lslnet.com/linux/f/docs1/i28/big5226734.htm  , http://www.jguru.com/faq/view.jsp?EID=1122360
说用

 
  1. <javac srcdir="src" destdir="target/classes"  
  2.          debug="true" debuglevel="lines, vars, source">  
  3.     ...  
  4. </javac>  

java 测试下:

 
  1. package com.chenlb;  
  2.   
  3. public class Test {  
  4.   
  5.     /** 
  6.      * ant javac Unknown Source 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         //ArrayIndexOutOfBoundsException  
  10.         String str = args[0];  
  11.         System.out.println(str);  
  12.     }  
  13. }  

运行:

 
  1. E:\workspace\build>java -cp .;unknown-source-0.1.jar com.chenlb.Test  
  2. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0  
  3.         at com.chenlb.Test.main(Unknown Source)  

但是我用了了还是出现 Unknown Source。

后来把debuglevel去了,只保留debug,就可以了,debuglevel 加了不会想来想去不明白,试一下改为lines,vars,source即是把空格去了。就行了。

最终的:

 
  1. <target name="compile" depends="init">  
  2.     <javac srcdir="${src.java.dir}" destdir="${build.java.dir}"  
  3.         debug="true" debuglevel="lines,source"  
  4.         encoding="GBK" source="1.6" target="1.6">  
  5.         <classpath refid="project.classpath" />  
  6.     </javac>  
  7. </target>  

出现:

 
  1. E:\workspace\build>java -cp .;unknown-source-0.1.jar com.chenlb.Test  
  2. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0  
  3.         at com.chenlb.Test.main(Test.java:10)  
分享到:
评论

相关推荐

    Using the ant javac adapter

    标题“Using the ant javac adapter”涉及到的是在Java开发中如何使用Ant构建工具与Javac编译器适配器的技巧。Ant是Apache软件基金会的一个开放源代码项目,它是一个基于Java的构建工具,类似于Make,但依赖于XML来...

    ANT构建的一个问题

    标题中的“ANT构建的一个问题”指的是在使用Apache Ant工具进行软件构建时遇到的特定问题。Apache Ant是一个Java库和命令行工具,其任务是驱动构建过程。它通过XML定义的构建文件来描述构建步骤,使得开发者可以自动...

    关于win10下javac无效的问题

    在Windows 10环境下,有时会遇到`javac`命令无法使用的问题,这通常是由于Java开发环境(JDK)没有正确安装或者环境变量配置不完整所导致的。`javac`是Java语言的编译器,它将源代码转换为可执行的字节码。下面我们...

    ant ant ant ant

    1. **任务驱动**:Ant通过一系列预定义的任务来完成工作,如`javac`用于编译Java源码,`jar`用于创建JAR文件,`copy`用于复制文件等。 2. **依赖管理**:Ant可以处理文件之间的依赖关系,确保构建顺序正确。 3. **可...

    javac 源码 javac 源码

    javac 在编译过程中会检测语法错误、类型不匹配等问题,并生成错误和警告信息。这些信息通过 `com.sun.tools.javac.main.DiagnosticListener` 接口传递给用户。 5. **注解处理**: Java 提供了注解(Annotation)...

    javac-source-code-reading:javac源码调试-java source code

    在开源社区,你可以找到许多关于 javac 源码的讨论和教程,这些资源可以帮助你在学习过程中遇到问题时寻求帮助。 总之,研究 javac 源码不仅能提升你的编程技巧,还能让你更好地理解和优化 Java 应用程序。这是一次...

    怎样让Ant编译生成的字节码带实际参数信息,不是arg0之类

    分析如下:Ant的debug和debuglevel参数会去调用JDK的javac -g参数, 而-g参数又包含3个选项, -g:{lines,vars,source},分别代表编译时向字节码中写入行号、方法局部变量信息、关联源代码信息。 这里主要说说-g:var...

    Ant详细配置总结

    ### Ant详细配置总结 #### 一、Ant简介与特点 Ant是Apache旗下的一款强大的构建工具,主要用于Java项目的自动化构建过程,如编译、测试、打包、部署等操作。它的核心优势在于其高度的可定制性和灵活性,使得开发者...

    linux下 Error running javac compiler

    本文详细介绍了在 Linux 系统中解决“Error running javac compiler”错误的具体步骤,包括配置 Apache Ant 环境变量、检查和修复 JDK 的安装与配置等问题。通过这些步骤,可以有效确保 Java 应用程序能够在 Linux ...

    Ant In Action 第2版 源码

    1. **基本任务**:书中展示了如何定义和执行基本任务,如`javac`任务用于编译Java源代码,`copy`任务用于复制文件和目录,`delete`任务用于删除文件和目录,以及`mkdir`任务用于创建目录结构。 2. **文件集...

    ant.jar下载

    org.apache.tools.ant.taskdefs.Javac org.apache.tools.ant.taskdefs.Jikes org.apache.tools.ant.taskdefs.Mkdir org.apache.tools.ant.taskdefs.Patch org.apache.tools.ant.taskdefs.Sleep org.apache....

    编译打包工具-Ant

    Ant 与 makefile 的比较,Makefile 有一些不足之处,比如很多人都会碰到的烦人的 Tab 问题。Ant 则与一般基于命令的工具有所不同,它是 Java 类的扩展。Ant 运行需要的 XML 格式的文件不是 Shell 命令文件。它是由一...

    javac源码免费下载

    Java编译器(javac)是Java开发工具包(JDK)的核心组件,它负责将编写好的Java源代码(.java文件)转换成Java字节码(.class文件),使得...此外,对javac源码的深入学习也是提升编程技能和问题解决能力的有效途径。

    ant配置文件

    每个元素都有其特定的属性,如source、target用于设置Javac的编译级别,destfile用于指定JAR文件的输出位置。 在Ant中,通过属性,可以定义任务间的依赖关系,确保构建顺序正确。同时,Ant还提供了条件语句(如和)...

    JAVA_Ant详细介绍与应用

    包含文档和项目实例。 用Ant实现Java项目的自动构建和部署。...1.利用Ant的javac任务来编译java程序 2.使用Ant的java任务运行Java程序 3.使用Ant的jar任务生成jar文件 4.使用Ant的war任务打包J2EE Web项目 五.总结

    ant 讲解ant 讲解ant 讲解ant 讲解

    Ant的强大还体现在它的任务(Task)体系,如`javac`用于编译Java源码,`jar`用于创建JAR文件,`copy`用于文件复制,`delete`用于删除文件等。此外,通过自定义任务或利用已有的第三方任务库,开发者可以扩展Ant的...

    ant-contrib-1.0b3的jar.zip

    &lt;javac srcdir="${src.dir}" destdir="${build.dir}" includes="@{sourceFile}"/&gt; ``` 除了`&lt;foreach&gt;`,Ant Contrib还提供了其他有用的任务,如`if`、`unless`(条件语句)、`for`(更灵活的循环)、`...

Global site tag (gtag.js) - Google Analytics