compile函数 java_如何为com.sun.tools.javac.Main.compile()函数设置类路径?

以下使用com.sun.tools.javac.Main的代码对我有用:

Apple.java

//This class is packaged in a jar named MyJavaCode.jar

import com.xyz.pqr.SomeJavaExamples;

public class Apple {

public static void main(String[] args) {

System.out.println("hello from Apple.main()");

}

}AClass.java

import com.sun.tools.javac.Main;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

public class AClass {

public static void main(String[] args) {

try {

//Specify classpath using next to -cp

//This looks just like how we specify parameters for javac

String[] optionsAndSources = {

"-g", "-source", "1.5",

"-target", "1.5",

"-cp", ".:/home/JavaCode/MyJavaCode.jar",

"Apple.java"

};

PrintWriter out = new PrintWriter(new FileWriter("./out.txt"));

int status = Main.compile(optionsAndSources, out);

System.out.println("status: " + status);

System.out.println("complete: ");

}catch (Exception e) {}

}

}注意:要编译此AClass.java,tools.jar需要位于classpath中,默认情况下不在此处,因此您必须指定它。

如果您正在使用Java 1.6,那么您应该考虑使用javax.tools.JavaCompiler,其getTask()方法接受options参数,该参数可以包含classpath。

例如:

import javax.tools.JavaCompiler;

import javax.tools.ToolProvider;

import javax.tools.JavaFileObject;

public final class AClass {

private static boolean compile(JavaFileObject... source ){

List options = new ArrayList();

// set compiler's classpath to be same as the runtime's

options.addAll(Arrays.asList("-classpath", System.getProperty("java.class.path")));

//Add more options including classpath

final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

final JavaCompiler.CompilationTask task = compiler.getTask(/*default System.err*/ null,

/*std file manager*/ null,

/*std DiagnosticListener */ null,

/*compiler options*/ options,

/*no annotation*/ null,

Arrays.asList(source));

return task.call();

}com.sun.tools.javac.Main也已弃用且未记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值