Java编译器在Jar中不工作

Java编译器在Jar中不工作,java,eclipse,compiler-construction,build,jar,Java,Eclipse,Compiler Construction,Build,Jar,我有一个java程序,它使用java编译器生成新的类文件 我在eclipse中使用JDK1.6,效果很好 但是当我将其导出为jar文件并且不想编译一些.java文件时,它给了我一个空错误(因为在使用jre的系统中没有编译器?)。 有没有办法在jar文件中提供编译器 File fRun = new File("someFile.java"); JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFile

我有一个java程序,它使用java编译器生成新的类文件

我在eclipse中使用JDK1.6,效果很好

但是当我将其导出为jar文件并且不想编译一些.java文件时,它给了我一个空错误(因为在使用jre的系统中没有编译器?)。 有没有办法在jar文件中提供编译器

File fRun = new File("someFile.java");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<String> options = Arrays.asList( new String[] { "-d", currentDir+"\\bin\\"} );
Iterable<? extends JavaFileObject> compUnits =  fileManager.getJavaFileObjects(fRun);
Boolean compRes = compiler.getTask(null, fileManager, null, options, null, compUnits).call();           

if(compRes == true){
    System.out.println("Compilation has succeeded");
    fileManager.close();
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    Class<?> compiledClass = cl.loadClass(someFile);
    cRun = compiledClass;
}else{
    System.out.println("Compilation error");
    fileManager.close();
    throw new Exception("Compilation Error");
}
File fRun=新文件(“someFile.java”);
JavaCompiler=ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager=compiler.getStandardFileManager(null,null,null);
Iterable options=Arrays.asList(新字符串[]{“-d”,currentDir+“\\bin\\”});
Iterable compiledClass=cl.loadClass(someFile);
cRun=编译类;
}否则{
System.out.println(“编译错误”);
fileManager.close();
抛出新异常(“编译错误”);
}

这将帮助您-->查找“…在常规独立应用程序中编译Java源文件的标准技术是使用驻留在jdk/lib下的tools.jar…”

这将帮助您-->查找“…在常规独立应用程序中编译Java源文件的标准技术是使用驻留在jdk/lib下的tools.jar…”

您应该找到JavaCompiler的实现来自何处(我从jdk猜测tools.jar)然后,你可以在你的类路径中包含它。正如他在答案中链接的@恰克·巴斯所说的那样,jar是非常大的,部署起来可能是不可接受的。如果是这样,你想考虑文章中描述的其他选项。

你应该找到JavaCompiler的实现从何而来。(我猜是来自JDK的tools.jar)当你的回答中显示了@恰克·巴斯的链接时,jar是非常大的,可能是不可接受的。如果是这样,你想考虑文章中描述的其他选项。< /P >你在Eclipse中添加了一个JRE吗?<代码> java版本< /C> >的输出。ode>javac在您正在运行的系统上运行并获得响应?java-版本:java版本“1.7.0_02”
JavaSE运行时环境(build 1.7.0_02-b13)
java HotSpot客户端VM(build 2.0-b10,混合模式,共享)@frewper在eclipse中一切都很好,只是当我导出为可运行的jar文件时,系统能否找到
javac
?我唯一能想到的是,您的系统路径上没有JDK(eclipse之外的路径)您是否在eclipse中添加了jre?java-version的输出是什么?您能否在运行的系统上键入
javac
,并获得响应?java-version:java版本“1.7.0\u 02”
JavaSE运行时环境(build 1.7.0\u 02-b13)
java热点客户端虚拟机(构建2.0-b10,混合模式,共享)@frewper在eclipse中一切都很好,只是当我导出为可运行的jar文件时,系统能否找到
javac
?我唯一能想到的是,您的系统路径上没有JDK(eclipse之外的路径)