Re: compiler class
"Andrew Thompson" <andrewthommo@gmail.com> a ?crit dans le
message de news:
1167543313.265084.108700@i12g2000cwa.googlegroups.com...
Jean Pierre Daviau wrote:
"Gordon Beaton" <n.o.t@for.email> a ?crit dans le message de
news: 4596b037$0$22507$8404b019@news.wineasy.se...
On Sat, 30 Dec 2006 12:18:48 -0500, Jean Pierre Daviau wrote:
...programmatically
compile a class with a third party compiler.
...
Sun recommends the following procedure,
.....
http://java.sun.com/developer/JDCTechTips/2003/tt0722.html#2
Is this possible with jdk1.1.8?
What did your tests indicate?
When I use compileClasses("string.java") I get a class not found
exception.
java.lang.ClassNotFoundException: Sample
at Sketch.compile(Compile8.java:37)
at Sketch.main(Compile8.java:47)
But I can make with exec (I know I would have to develop the exec
method: using wait etc.)
--------------------
Sketch ---------------------------------
/*
"C:\Program Files\Java\jdk1.5.0_10\bin\java" -classpath
..;"C:\Program Files\Java\jdk1.5.0_10\lib\tools.jar" CompileIt
"C:\Program Files\Java\jdk1.5.0_
10\bin\java" -classpath .;"C:\Program
Files\Java\jdk1.5.0_10\lib\tools.jar" CompileIt Sample
public class Sample {
public static void main(String args[]) {
System.out.println(new java.util.Date());
}
}
*/
import java.io.*;
import java.lang.reflect.*;
import java.lang.Class;
import java.lang.Compiler;
class Sketch{
public static void compile(String filename)throws Exception {
/*
Runtime.getRuntime().exec("javac " + filename);
*/
String aclass = filename.substring(0, filename.length()-5);
// compile it
boolean compileReturnCode =
java.lang.Compiler.compileClasses(filename);
// run it
Object objectParameters[] = {new String[]{filename.substring(0,
filename.length()-5)}};
Class classParameters[] = {objectParameters[0].getClass()};
Class aClass = Class.forName(aclass);
Object instance = aClass.newInstance();
Method theMethod = aClass.getDeclaredMethod("main",
classParameters);
theMethod.invoke(instance, objectParameters);
}
public static void main(String[] args)throws Exception {
String sourceFile = args[0];
compile(sourceFile);
/* 1.2
System.setProperty("java.compiler", "Jikes");
*/
}
}
-------------------------------------------------
Note 1: That the compiler will probably only be ableto write the
1.1 class fromat,
good enough
Note 2: That the (very not publicly) documented classes
of the com.sun.* package heirarchy are undocumented
for a variety of reasons, one of which is that Sun
reserved the right to move the 'entry points' to the code
at will. AFAIR - their were a number of changes that
affected the developers of Apache/Tomcat.
Has long has there is nothing personnal against me ;-)
JPD