项目中,我一般用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
说用
- <javac srcdir&#61;"src" destdir&#61;"target/classes"
- debug&#61;"true" debuglevel&#61;"lines, vars, source">
- ...
- javac>
...
java 测试下&#xff1a;
- package com.chenlb;
- public class Test {
- /**
- * ant javac Unknown Source
- */
- public static void main(String[] args) {
- //ArrayIndexOutOfBoundsException
- String str &#61; args[0];
- System.out.println(str);
- }
- }
package com.chenlb;
public class Test {
/**
* ant javac Unknown Source
*/
public static void main(String[] args) {
//ArrayIndexOutOfBoundsException
String str &#61; args[0];
System.out.println(str);
}
}
运行&#xff1a;
- E:\workspace\build>java -cp .;unknown-source-0.1.jar com.chenlb.Test
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
- at com.chenlb.Test.main(Unknown Source)
E:\workspace\build>java -cp .;unknown-source-0.1.jar com.chenlb.Test
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at com.chenlb.Test.main(Unknown Source)
但是我用了了还是出现 Unknown Source。
后来把debuglevel去了&#xff0c;只保留debug&#xff0c;就可以了&#xff0c;debuglevel 加了不会想来想去不明白&#xff0c;试一下改为lines,vars,source即是把空格去了。就行了。
最终的&#xff1a;
- <target name&#61;"compile" depends&#61;"init">
- <javac srcdir&#61;"${src.java.dir}" destdir&#61;"${build.java.dir}"
- debug&#61;"true" debuglevel&#61;"lines,source"
- encoding&#61;"GBK" source&#61;"1.6" target&#61;"1.6">
- <classpath refid&#61;"project.classpath" />
- javac>
- target>
encoding&#61;"GBK" source&#61;"1.6" target&#61;"1.6">
出现&#xff1a;
- E:\workspace\build>java -cp .;unknown-source-0.1.jar com.chenlb.Test
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
- at com.chenlb.Test.main(Test.java:10)
1)javac命令支持的参数&#xff1a;
Attributes Description
srcdir &#xff1a;必须的&#xff0c;除非嵌套有
bootclasspath&#xff1a;编译过程中需要导入class文件会被导入
bootclasspathref&#xff1a;编译过程中需要引用的class文件夹目录
classpath&#xff1a;The class path to use. 文件夹中class会被导入的jar包
classpathref&#xff1a;文件夹中class文件会被引用的jar包
compiler &#xff1a;指定要使用的编译器。如果未设置该特性&#xff0c;将使用 build.compiler 属性的值&#xff08;如果设置&#xff09;。否则&#xff0c;将使用当前 VM 的默认编译器。
例子&#xff1a;设置环境变量 JIKESHOME 为 jikes 的路径
设置 ANT_OPTS&#61;-Dbuild.compiler&#61;jikes
将 jikes 路径添加到系统 PATH 中
然后在所有的ant任务就默认使用 jikes 了, 如果你想在单个工程中使用 ant, 就不要添加 ANT_OPTS 环境变量, 只需要修改 build.xml 中 javac 标签中的 compiler 为 jikes
debug&#xff1a; 当值未为true时产生调试信息
debuglevel&#xff1a; 相当于命令行中要追加到 -g 命令行开关后面的关键字列表。这将会被除 modern 和 classic(ver >&#61; 1.2) 以外的所有实现忽略。合法值是 none 或下列关键字的逗号分隔列表&#xff1a;lines、vars 和 source。如果不指定 debuglevel&#xff0c;则默认情况下&#xff0c;将不会在 -g 的后面追加任何关键字。如果不打开 debug&#xff0c;该特性将被忽略。
depend&#xff1a; 这个任务依赖的任务。当运行这个任务时&#xff0c;首先按照顺序依次执行完依赖的任务&#xff0c;如果出错将停止执行
deprecation&#xff1a; 假如为真&#xff0c;将会给出不建议使用的API&#xff0c;默认值false
destdir&#xff1a; 编译后文件存放的目标文件夹&#xff0c;默认是当前文件夹。
encoding&#xff1a;指定编码格式
excludes &#xff1a;必须排除的文件模式的列表&#xff0c;以逗号或空格分隔。如果忽略&#xff0c;将不会排除任何文件&#xff08;默认排除的文件除外&#xff09;。
excludesfile&#xff1a; 该文件的每一行都将作为一个 exclude 模式。
extdirs: Specifies an alternative location of installed extensions that overrides the default.
failonerror: 指定 clientgen Ant 任务在出现错误的情况下是否继续执行。 此特性的有效值为 True 或 False。默认值为 True&#xff0c;这意味着即使遇到错误也要继续执行。
fork: 为true时在外部启用一个新的JDK 编译器进程执行编译。默认值是true,应用在需要配置编译器运行时环境时
includeantruntime :指出是否应在类路径中包括 Ant 运行时程序库&#xff0c;默认为 yes。
includejavaruntime: 指出是否应在类路径中包括来自执行 VM 的默认运行时程序库&#xff0c;默认为 no。
includes: 必须包括的文件模式的列表&#xff0c;以逗号或空格分隔。如果忽略&#xff0c;将包括所有文件。
includesfile: 文件名。该文件的每一行都将作为一个 include 模式。
listfiles: 为真时显示被编译文件列表&#xff0c;默认为false
memoryinitialsize 如果 javac 在外部运行&#xff0c;则是底层 VM 的初始内存大小&#xff1b;否则将被忽略。默认为标准 VM 内存设置。&#xff08;例如&#xff1a;83886080、81920k 或 80m&#xff09;
memorymaximumsize: 如果 javac 在外部运行&#xff0c;则是底层 VM 的最大内存大小&#xff1b;否则将被忽略。默认为标准 VM 内存设置。&#xff08;例如&#xff1a;83886080、81920k 或 80m&#xff09;
nowarn: 为真时将忽略所有警告信息
optimize: 指出是否应该用优化方式编译源代码&#xff0c;默认为 off。
source&#xff1a; 假如设置为1.4,将激活断言。默认是1.3
sourcepath: 指定源资源文件夹。默认指向srcdir
sourcepathref: 指定你想引用资源
target: Specifies the VM version to generate class files for (for example, 1.1 or 1.3).
verbose: 控制生成消息的输出量。
2)compilerarg设置命令行参数&#xff1a;file,line,path,value.其中value直接指定编译参数&#xff0c;如-g。file,line,path没搜到示例&#xff0c;