入口函数在CommandLineRunner里面,其中调用了MyCheckUnreachableCode_tijiao的MyCheckUnreachableCode方法,来检查一些不可达代码,程序在eclipse中配置好参数运行正常。但是将源码打包后(打包工具用的这个开源项目自身写好的一个build.xml文件,直接用ant build而成),如果不加参数会提示usge()的内容,但是一旦加了一个参数就会报:D:\my coder\closure-compiler\build>java -jar compiler.jar test.js
test.js
Exception in thread "main" java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.
null
at com.google.common.base.Preconditions.checkState(Preconditions.java:129)
at com.google.javascript.jscomp.NodeTraversal.pushScope(NodeTraversal.java:523)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:248)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:422)
at com.google.javascript.jscomp.MyCheckUnreachableCode_tijiao.MyCheckUnreachableCode(MyCheckUnreachableCode_tijiao.java:37)
at com.google.javascript.jscomp.CommandLineRunner.main(CommandLineRunner.java:206)
Caused by: java.lang.IllegalStateException
... 6 more其中com.google.common.base.Preconditions.checkState是源码中的一个jar包,完全没有更改过,并且打完后的jar包中也有这个class;com.google.javascript.jscomp.NodeTraversal.pushScope和com.google.javascript.jscomp.NodeTraversal.traverse是MyCheckUnreachableCode中间接用到的方法。
想不通为什么在eclipse下面可运行而打包后会报这个错误,还请大家多多提宝贵意见!~
(两个主要类如下:)
public class CommandLineRunner {
public static String inputJSFileName;
private static List<String> processArgs(String[] args) {
// Args4j has a different format that the old command-line parser.
// So we use some voodoo to get the args into the format that args4j
// expects.
Pattern argPattern = Pattern.compile("(--[a-zA-Z_]+)=(.*)");
Pattern quotesPattern = Pattern.compile("^['\"](.*)['\"]$");
List<String> processedArgs = Lists.newArrayList(); for (String arg : args) {
Matcher matcher = argPattern.matcher(arg);
if (matcher.matches()) {
processedArgs.add(matcher.group(1)); String value = matcher.group(2);
Matcher quotesMatcher = quotesPattern.matcher(value);
if (quotesMatcher.matches()) {
processedArgs.add(quotesMatcher.group(1));
} else {
processedArgs.add(value);
}
} else {
processedArgs.add(arg);
}
}
return processedArgs;
} /**
* Runs the Compiler. Exits cleanly in the event of an error.
* @throws IOException
*/
public static void main(String[] args) throws IOException {
if(args.length <= 0){
usge();
}
List<String> processedArgs = processArgs(args);
for(String argList: processedArgs){
System.out.println(argList);
inputJSFileName=argList;
MyCheckUnreachableCode_tijiao CheckUnreachableCode_tijiao = new MyCheckUnreachableCode_tijiao();
String message = CheckUnreachableCode_tijiao.MyCheckUnreachableCode("test2.js");//这里出现了问题!
System.out.print(message);
}
} private static void usge() {
// TODO Auto-generated method stub
System.out.print("The command format shoule be: filename.js");
}
}public class MyCheckUnreachableCode_tijiao { public static String inputJSFileName;
private static final CompilerOptions options = new CompilerOptions();
private static int num = 0; MyCheckUnreachableCode_tijiao(){
} public String MyCheckUnreachableCode(String JSFileName) throws IOException {
inputJSFileName = JSFileName;
StringBuffer warningMessage = new StringBuffer();
Compiler compiler = new Compiler();
Node rootNode = compiler.parse(JSSourceFile.fromFile(inputJSFileName));
options.checkUnreachableCode = CheckLevel.WARNING;
options.checkMissingReturn = CheckLevel.WARNING;
NodeTraversal.traverse(compiler, rootNode, new CheckUnreachableCode(compiler, options.checkUnreachableCode));
NodeTraversal.traverse(compiler, rootNode, new CheckMissingReturn(compiler, options.checkMissingReturn));
for (JSError message : compiler.getWarnings()) {
warningMessage = warningMessage.append(message.toString()+ "\n");
}
String Message = warningMessage.toString();
return Message;
}
}
test.js
Exception in thread "main" java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.
null
at com.google.common.base.Preconditions.checkState(Preconditions.java:129)
at com.google.javascript.jscomp.NodeTraversal.pushScope(NodeTraversal.java:523)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:248)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:422)
at com.google.javascript.jscomp.MyCheckUnreachableCode_tijiao.MyCheckUnreachableCode(MyCheckUnreachableCode_tijiao.java:37)
at com.google.javascript.jscomp.CommandLineRunner.main(CommandLineRunner.java:206)
Caused by: java.lang.IllegalStateException
... 6 more其中com.google.common.base.Preconditions.checkState是源码中的一个jar包,完全没有更改过,并且打完后的jar包中也有这个class;com.google.javascript.jscomp.NodeTraversal.pushScope和com.google.javascript.jscomp.NodeTraversal.traverse是MyCheckUnreachableCode中间接用到的方法。
想不通为什么在eclipse下面可运行而打包后会报这个错误,还请大家多多提宝贵意见!~
(两个主要类如下:)
public class CommandLineRunner {
public static String inputJSFileName;
private static List<String> processArgs(String[] args) {
// Args4j has a different format that the old command-line parser.
// So we use some voodoo to get the args into the format that args4j
// expects.
Pattern argPattern = Pattern.compile("(--[a-zA-Z_]+)=(.*)");
Pattern quotesPattern = Pattern.compile("^['\"](.*)['\"]$");
List<String> processedArgs = Lists.newArrayList(); for (String arg : args) {
Matcher matcher = argPattern.matcher(arg);
if (matcher.matches()) {
processedArgs.add(matcher.group(1)); String value = matcher.group(2);
Matcher quotesMatcher = quotesPattern.matcher(value);
if (quotesMatcher.matches()) {
processedArgs.add(quotesMatcher.group(1));
} else {
processedArgs.add(value);
}
} else {
processedArgs.add(arg);
}
}
return processedArgs;
} /**
* Runs the Compiler. Exits cleanly in the event of an error.
* @throws IOException
*/
public static void main(String[] args) throws IOException {
if(args.length <= 0){
usge();
}
List<String> processedArgs = processArgs(args);
for(String argList: processedArgs){
System.out.println(argList);
inputJSFileName=argList;
MyCheckUnreachableCode_tijiao CheckUnreachableCode_tijiao = new MyCheckUnreachableCode_tijiao();
String message = CheckUnreachableCode_tijiao.MyCheckUnreachableCode("test2.js");//这里出现了问题!
System.out.print(message);
}
} private static void usge() {
// TODO Auto-generated method stub
System.out.print("The command format shoule be: filename.js");
}
}public class MyCheckUnreachableCode_tijiao { public static String inputJSFileName;
private static final CompilerOptions options = new CompilerOptions();
private static int num = 0; MyCheckUnreachableCode_tijiao(){
} public String MyCheckUnreachableCode(String JSFileName) throws IOException {
inputJSFileName = JSFileName;
StringBuffer warningMessage = new StringBuffer();
Compiler compiler = new Compiler();
Node rootNode = compiler.parse(JSSourceFile.fromFile(inputJSFileName));
options.checkUnreachableCode = CheckLevel.WARNING;
options.checkMissingReturn = CheckLevel.WARNING;
NodeTraversal.traverse(compiler, rootNode, new CheckUnreachableCode(compiler, options.checkUnreachableCode));
NodeTraversal.traverse(compiler, rootNode, new CheckMissingReturn(compiler, options.checkMissingReturn));
for (JSError message : compiler.getWarnings()) {
warningMessage = warningMessage.append(message.toString()+ "\n");
}
String Message = warningMessage.toString();
return Message;
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货