Win a copy of Mesos in Action this week in the Cloud/Virtualizaton forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Compile at runtime

 
Mike Broadbear
Ranch Hand
Posts: 39
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Is there a way to compile a .java source file at runtime?
 
Michael Morris
Ranch Hand
Posts: 3451
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Mike,
Yep, checkout java.lang.Runtime. It has all of the old Unix style exec() functions. For example:

Hope this helps,
Michael Morris
 
Dirk Schreckmann
Sheriff
Posts: 7023
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Deos anybody know if such commands work on Macs?
 
Cindy Glass
"The Hood"
Sheriff
Posts: 8521
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
From Apples - The Care and Feeding of Runtime.exec.

For example, you can invoke the Java compiler thusly:
String args = {"java", "sun.tools.javac.Main", ...javac argument list...};
Runtime.getRuntime().exec(args);
 
john guthrie
Ranch Hand
Posts: 124
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You don't need to Runtime.exec the compiler. I know ant doesn't do this...
Looking at the ant source code, it looks like they use a class names "sun.tools.javac.Main", so if you can find that (again, the ant src distro would help here), you can do it
 
Michael Morris
Ranch Hand
Posts: 3451
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi John,
That is a good point. Most of us tend to forget about the propriatery packages that are available to us since there is usually not a published API nor any guarantee that they will remain as is. But I'm sure your method would work fine.
Michael Morris
 
Dave Landers
Ranch Hand
Posts: 401
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Check Rodey Green's Java Glossary entry on javac - under the table of command line switches he gives a usage example.
This class is in JAVA_HOME/lib/tools.jar, so you have to include that in CLASSPATH to use it from a program.
As I recall, the main() method is used from javac.exe, but it does a System.exit() - so you don't want to do that from your program. Use the compile() method which returns a boolean for success/fail.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic