Hi Friends,
Can any body please give a sample to compile java files presented inside package from java code.
Thanks
Welcome to the Java Programming Forums
The professional, friendly Java community. 21,500 members and growing!
The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.
>> REGISTER NOW TO START POSTING
Members have full access to the forums. Advertisements are removed for registered users.
Hi Friends,
Can any body please give a sample to compile java files presented inside package from java code.
Thanks
What does "inside package" mean? Do you mean the source has a package statement.
Can you show the layout (folders) of the files and the packages they are in that you are trying to compile?
Is the javac command to be issued by a java program?from java code.
Yes, source has package structure.
for example my package structure is
src
--com.example.main -------> contains 2 classes
--Test1.java
--Test2.java
--com.example.util------------->contains 2 classes
--Util1.java
--Util2.java
I need to compile this src using java programe.
Thanks
Look at the JavaCompiler interface.
Here are some samples I got from somewhere:
import java.io.*; import java.util.*; import javax.tools.*; import javax.tools.JavaCompiler.*; import java.net.URI; import java.lang.reflect.Method; public class JavaCompilationTest3 { public static void main(String[] args) throws Exception { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); DiagnosticCollector<JavaFileObject> diagnosticsCollector = new DiagnosticCollector<JavaFileObject>(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnosticsCollector, null, null); JavaFileObject javaObjectFromString = getJavaFileContentsAsString(); Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(javaObjectFromString); CompilationTask task = compiler.getTask(null, fileManager, diagnosticsCollector, null, null, fileObjects); Boolean result = task.call(); List<Diagnostic<? extends JavaFileObject>> diagnostics = diagnosticsCollector.getDiagnostics(); for(Diagnostic<? extends JavaFileObject> d : diagnostics){ // Print all the information here. System.out.println(d.getMessage(null)); } if(result == true){ System.out.println("Compilation has succeeded"); // Now execute it Class tc = Class.forName("TestClass"); // System.out.println("tc=" + tc); Method[] methods = tc.getDeclaredMethods(); try { Method testMethod = tc.getMethod("testMethod", new Class[]{}); //warning: [unchecked] unchecked call to getMethod(java.lang.String,java.lang.Class<?>...) //as a member of the raw type java.lang.Class testMethod.invoke(null, new Object[]{}); // Call TestClass's testMethod() }catch(Exception x) { x.printStackTrace(); } }else{ System.out.println("Compilation fails."); } } //------------------------------------------------------------------ static class JavaObjectFromString extends SimpleJavaFileObject{ private String contents = null; public JavaObjectFromString(String className, String contents) throws Exception{ super(new URI(className), Kind.SOURCE); this.contents = contents; } public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { return contents; } } // end class private static SimpleJavaFileObject getJavaFileContentsAsString(){ StringBuilder javaFileContents = new StringBuilder("" + "class TestClass{" + " public static void testMethod(){" + " System.out.println(" + "\" this is a test message.\"" + ");" + "}" + "}"); JavaObjectFromString javaFileObject = null; try{ javaFileObject = new JavaObjectFromString("TestClass", javaFileContents.toString()); }catch(Exception exception){ exception.printStackTrace(); } return javaFileObject; } // end class }
// Auto parsing code import java.io.*; import java.util.*; import javax.tools.*; import javax.tools.JavaCompiler.*; import java.net.URI; import java.lang.reflect.Method; // Define classes needed here interface TestQuestionSaver { public void AddQuestion(Question q); } class Array { String[] array; Array(String a1, String a2, String a3) { array = new String[] {a1, a2, a3}; } } // end class Array class Question { String url, ques, what; Array choices; int type; boolean answer; String sAnswer; public Question(String url, String ques, int type, Array choices, boolean answer, String what){ this.url = url; this.ques = ques; this.type = type; this.choices = choices; this.what = what; this.answer = answer; } public Question(String url, String ques, int type, Array choices, String sAnswer, String what){ this.url = url; this.ques = ques; this.type = type; this.choices = choices; this.sAnswer = sAnswer; this.what = what; } } // end class Question //--------------------------------------------------------------------- public class TestQuestionParser implements TestQuestionSaver { // Define the program to compile and execute as a String String pgmPart1a = "class "; String pgmPart1b = " {" + " public static void addQuestions(TestQuestionSaver test) {\n" + " final int QUESTION_TYPE_CHOICE = 1;\n" + " final int QUESTION_TYPE_TF = 2;\n"; // The code to "parse" goes between these lines of ********s //************************************************************************************************************* String code = " test.AddQuestion( new Question (\"com.scorm.golfsamples.interactions.etiquette_1\"," + " \"When Another player is attempting a shot, it is best to stand:\"," + " QUESTION_TYPE_CHOICE," + " new Array(\"On top of his ball\", \"Directly in his line of fire\", \"Out of the player's line of sight\")," + " \"Out of the player's line of sight\"," + " \"obj_etiquette\")" + " );\n" + " test.AddQuestion( new Question (\"com.scorm.golfsamples.interactions.etiquette_2\"," + " \"Generally sand trap rakes should be left outside of the hazard.\"," + " QUESTION_TYPE_TF," + " null," + " true," + " \"obj_etiquette\")" + " );\n" + " test.AddQuestion( new Question (\"com.scorm.golfsamples.interactions.etiquette_3\"," + " \"The player with the best score on the previous hole tees off:\"," + " QUESTION_TYPE_CHOICE," + " new Array(\"First\", \"Last\", \"With a putter\")," + " \"First\"," + " \"obj_etiquette\")" + " );\n"; //************************************************************************************************ String pgmPart2 = "}\n }"; // wrapup method and class //---------------------------------------------- // Start here public static void main(String[] args) { new TestQuestionParser(); } //---------------------------------------------------------------------------------- public TestQuestionParser() { // Here create the .java file and compile it and then call its addQuestion method String className = "TestQuestions2"; // The name of class we're generating String source = pgmPart1a + className + pgmPart1b+ code + pgmPart2; // Put together the parts necessary to compile the above code JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); DiagnosticCollector<JavaFileObject> diagnosticsCollector = new DiagnosticCollector<JavaFileObject>(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnosticsCollector, null, null); JavaFileObject javaObjectFromString = getJavaFileContentsAsString(className, source); Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(javaObjectFromString); // Compile it CompilationTask task = compiler.getTask(null, fileManager, diagnosticsCollector, null, null, fileObjects); Boolean result = task.call(); // Show error messages List<Diagnostic<? extends JavaFileObject>> diagnostics = diagnosticsCollector.getDiagnostics(); for(Diagnostic<? extends JavaFileObject> d : diagnostics){ // Print all the information here. System.out.println(d.getMessage(null)); } // Test results if(result == true){ System.out.println("Compilation has succeeded"); // Now execute it try { Class tc = Class.forName(className); // System.out.println("tc=" + tc); Method[] methods = tc.getDeclaredMethods(); Method testMethod = tc.getMethod("addQuestions", new Class[]{TestQuestionSaver.class}); //warning: [unchecked] unchecked call to getMethod(java.lang.String,java.lang.Class<?>...) //as a member of the raw type java.lang.Class testMethod.invoke(null, new Object[]{this}); // Call addQuestions }catch(Exception x) { x.printStackTrace(); } }else{ System.out.println("Compilation fails."); } } // end constructor //------------------------------------------------------------------ class JavaObjectFromString extends SimpleJavaFileObject{ private String contents = null; public JavaObjectFromString(String className, String contents) throws Exception{ super(new URI(className), Kind.SOURCE); this.contents = contents; } public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { return contents; } } // end class private SimpleJavaFileObject getJavaFileContentsAsString(String className, String source){ StringBuilder javaFileContents = new StringBuilder(source); JavaObjectFromString javaFileObject = null; try{ javaFileObject = new JavaObjectFromString(className, javaFileContents.toString()); }catch(Exception exception){ exception.printStackTrace(); } return javaFileObject; } // end getJavaFileContensAsString //------------------------------------------------------------------------------ // The call-back interface method will get the data from the calls made to it public void AddQuestion(Question q) { System.out.println("url=" +q. url + ", ques=" + q.ques + "\n answer=" + q.sAnswer); } } /* Running: D:\Java\jdk1.6.0_25\jre\bin\java.exe -Xmx512M -classpath D:\JavaDevelopment;. TestQuestionParser Compilation has succeeded url=com.scorm.golfsamples.interactions.etiquette_1, ques=When Another player is attempting a shot, it is best to stand: answer=Out of the player's line of sight url=com.scorm.golfsamples.interactions.etiquette_2, ques=Generally sand trap rakes should be left outside of the hazard. answer=null url=com.scorm.golfsamples.interactions.etiquette_3, ques=The player with the best score on the previous hole tees off: answer=First 0 error(s) */
Last edited by Norm; July 14th, 2011 at 08:15 AM.