List of usage examples for javax.tools JavaCompiler getTask
CompilationTask getTask(Writer out, JavaFileManager fileManager, DiagnosticListener<? super JavaFileObject> diagnosticListener, Iterable<String> options, Iterable<String> classes, Iterable<? extends JavaFileObject> compilationUnits);
From source file:org.bigtester.ate.experimentals.DynamicClassLoader.java
/** * F2 test./*from ww w.java 2 s . co m*/ * * @throws IllegalAccessException * @throws InstantiationException * @throws ClassNotFoundException * @throws MalformedURLException */ @Test public void f2Test() throws InstantiationException, IllegalAccessException, ClassNotFoundException, MalformedURLException { /** Compilation Requirements *********************************************************************************************/ DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>(); JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null); // This sets up the class path that the compiler will use. // I've added the .jar file that contains the DoStuff interface within // in it... List<String> optionList = new ArrayList<String>(); optionList.add("-classpath"); optionList.add(System.getProperty("java.class.path") + ";dist/InlineCompiler.jar"); File helloWorldJava = new File(System.getProperty("user.dir") + "/generated-code/caserunners/org/bigtester/ate/model/project/CaseRunner8187856223134148550.java"); Iterable<? extends JavaFileObject> compilationUnit = fileManager .getJavaFileObjectsFromFiles(Arrays.asList(helloWorldJava)); JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, optionList, null, compilationUnit); /********************************************************************************************* Compilation Requirements **/ if (task.call()) { /** Load and execute *************************************************************************************************/ System.out.println("Yipe"); // Create a new custom class loader, pointing to the directory that // contains the compiled // classes, this should point to the top of the package structure! URLClassLoader classLoader = new URLClassLoader(new URL[] { new File(System.getProperty("user.dir") + "/generated-code/caserunners/").toURI().toURL() }); // Load the class from the classloader by name.... Class<?> loadedClass = classLoader .loadClass("org.bigtester.ate.model.project.CaseRunner8187856223134148550"); // Create a new instance... Object obj = loadedClass.newInstance(); // Santity check if (obj instanceof IRunTestCase) { ((IRunTestCase) obj).setCurrentExecutingTCName("test case name example"); Assert.assertEquals(((IRunTestCase) obj).getCurrentExecutingTCName(), "test case name example"); System.out.println("pass"); } /************************************************************************************************* Load and execute **/ } else { for (Diagnostic<? extends JavaFileObject> diagnostic : diagnostics.getDiagnostics()) { System.out.format("Error on line %d in %s%n", diagnostic.getLineNumber(), diagnostic.getSource().toUri()); } } }
From source file:org.commonjava.test.compile.CompilerFixture.java
public CompilerResult compile(final File directory, final CompilerFixtureConfig config) throws IOException { if (directory == null || !directory.isDirectory()) { return null; }/*from w w w.j a va 2 s . c o m*/ final File target = temp.newFolder(directory.getName() + "-classes"); final List<File> sources = scan(directory, "**/*.java"); final JavaCompiler javac = ToolProvider.getSystemJavaCompiler(); final StandardJavaFileManager fileManager = javac.getStandardFileManager(null, null, null); final Set<JavaFileObject> objects = new HashSet<>(); for (final JavaFileObject jfo : fileManager.getJavaFileObjectsFromFiles(sources)) { objects.add(jfo); } final DiagnosticCollector<JavaFileObject> diags = new DiagnosticCollector<>(); final List<String> options = new ArrayList<>(Arrays.asList("-g", "-d", target.getCanonicalPath())); options.addAll(config.getExtraOptions()); final StringBuilder sp = new StringBuilder(); sp.append(directory.getCanonicalPath()).append(';').append(target.getCanonicalPath()); File generatedSourceDir = null; final List<String> procOptions = new ArrayList<>(options); procOptions.add("-proc:only"); final Set<File> seenSources = new HashSet<>(sources); Boolean result = Boolean.TRUE; final List<Class<? extends AbstractProcessor>> annoProcessors = config.getAnnotationProcessors(); if (!annoProcessors.isEmpty()) { final StringBuilder sb = new StringBuilder(); for (final Class<? extends AbstractProcessor> annoProcessor : annoProcessors) { if (sb.length() > 0) { sb.append(","); } sb.append(annoProcessor.getCanonicalName()); } procOptions.add("-processor"); procOptions.add(sb.toString()); generatedSourceDir = temp.newFolder(directory.getName() + "-generated-sources"); procOptions.add("-s"); procOptions.add(generatedSourceDir.getCanonicalPath()); sp.append(';').append(generatedSourceDir.getCanonicalPath()); procOptions.add("-sourcepath"); procOptions.add(sp.toString()); int pass = 1; List<File> nextSources; do { logger.debug("pass: {} Compiling/processing generated sources with: '{}':\n {}\n", pass, new JoinLogString(procOptions, ", "), new JoinLogString(sources, "\n ")); for (final JavaFileObject jfo : fileManager.getJavaFileObjectsFromFiles(seenSources)) { objects.add(jfo); } final CompilationTask task = javac.getTask(null, fileManager, diags, procOptions, null, objects); result = task.call(); nextSources = scan(generatedSourceDir, "**/*.java"); logger.debug("\n\nNewly scanned sources:\n {}\n\nPreviously seen sources:\n {}\n\n", new JoinLogString(nextSources, "\n "), new JoinLogString(seenSources, "\n ")); nextSources.removeAll(seenSources); seenSources.addAll(nextSources); pass++; } while (pass < config.getMaxAnnotationProcessorPasses() && !nextSources.isEmpty()); } if (result) { options.add("-sourcepath"); options.add(sp.toString()); options.add("-proc:none"); for (final JavaFileObject jfo : fileManager.getJavaFileObjectsFromFiles(seenSources)) { objects.add(jfo); } final CompilationTask task = javac.getTask(null, fileManager, diags, options, null, objects); result = task.call(); logger.debug("Compiled classes:\n {}\n\n", new JoinLogString(scan(target, "**/*.class"), "\n ")); } else { logger.warn("Annotation processing must have failed. Skipping compilation step."); } for (final Diagnostic<? extends JavaFileObject> diag : diags.getDiagnostics()) { logger.error(String.valueOf(diag)); } final CompilerResult cr = new CompilerResultBuilder().withClasses(target).withDiagnosticCollector(diags) .withGeneratedSources(generatedSourceDir).withResult(result).build(); results.add(cr); return cr; }
From source file:org.deventropy.shared.utils.ClassUtilTest.java
@Test public void testCallerClassloader() throws Exception { // Write the source file - see // http://stackoverflow.com/questions/2946338/how-do-i-programmatically-compile-and-instantiate-a-java-class final File sourceFolder = workingFolder.newFolder(); // Prepare source somehow. final String source = "package test; public class Test { }"; // Save source in .java file. final File sourceFile = new File(sourceFolder, "test/Test.java"); sourceFile.getParentFile().mkdirs(); FileUtils.writeStringToFile(sourceFile, source, "UTF-8"); // Compile the file final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); final StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); final Iterable<? extends JavaFileObject> compilationUnit = fileManager .getJavaFileObjectsFromFiles(Arrays.asList(sourceFile)); compiler.getTask(null, fileManager, null, null, null, compilationUnit).call(); // Create the class loader final URLClassLoader urlcl = new URLClassLoader(new URL[] { sourceFolder.toURI().toURL() }); final Class<?> loadedClass = urlcl.loadClass("test.Test"); final ContextClNullingObject testObj = new ContextClNullingObject(loadedClass.newInstance()); final Thread worker = new Thread(testObj); worker.start();//from ww w .j av a2 s. c o m worker.join(); assertEquals(urlcl, testObj.getReturnedCl()); urlcl.close(); }
From source file:org.dspace.installer_edm.InstallerCrosswalk.java
/** * Compila el java en tiempo real/*from w w w .jav a 2 s. co m*/ * * @return xito de la operacin */ protected boolean compileEDMCrossWalk() { boolean status = false; SimpleJavaFileObject fileObject = new DynamicJavaSourceCodeObject(canonicalCrosswalkName, edmCrossWalkContent); JavaFileObject javaFileObjects[] = new JavaFileObject[] { fileObject }; Iterable<? extends JavaFileObject> compilationUnits = Arrays.asList(javaFileObjects); // libreras necesarias para linkar con el fuente a compilar String myInstallerPackagesDirPath = myInstallerDirPath + fileSeparator + "packages" + fileSeparator; StringBuilder jars = (fileSeparator.equals("\\")) ? new StringBuilder(myInstallerPackagesDirPath).append("dspace-api-1.7.2.jar;") .append(myInstallerPackagesDirPath).append("jdom-1.0.jar;") .append(myInstallerPackagesDirPath).append("oaicat-1.5.48.jar") : new StringBuilder(myInstallerPackagesDirPath).append("dspace-api-1.7.2.jar:") .append(myInstallerPackagesDirPath).append("jdom-1.0.jar:") .append(myInstallerPackagesDirPath).append("oaicat-1.5.48.jar"); String[] compileOptions = new String[] { "-d", myInstallerWorkDirPath, "-source", "1.6", "-target", "1.6", "-cp", jars.toString() }; Iterable<String> compilationOptionss = Arrays.asList(compileOptions); JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>(); StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, Locale.getDefault(), null); JavaCompiler.CompilationTask compilerTask = compiler.getTask(null, stdFileManager, diagnostics, compilationOptionss, null, compilationUnits); status = compilerTask.call(); if (!status) { for (Diagnostic diagnostic : diagnostics.getDiagnostics()) { installerEDMDisplay .showMessage("Error on line " + diagnostic.getLineNumber() + " in " + diagnostic); } } try { stdFileManager.close(); } catch (IOException e) { showException(e); } return status; }
From source file:org.echocat.redprecursor.impl.sun.compilertree.SunNodeFactoryIntegrationTest.java
private void compile(File... files) { final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); final StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); final Iterable<? extends JavaFileObject> compilationUnits2 = fileManager.getJavaFileObjects(files); final DiagnosticCollector<Object> listener = null; //new DiagnosticCollector<Object>(); final CompilationTask task = compiler.getTask(null, fileManager, listener, Arrays.<String>asList("-processor", RedprecursorProcessor.class.getName()), null, compilationUnits2);//from w ww . j av a 2 s. c o m //final CompilationTask task = compiler.getTask(null, fileManager, listener, Arrays.<String>asList(), null, compilationUnits2); task.call(); }
From source file:org.evosuite.junit.FooTestClassLoader.java
private static boolean compileJavaFile(String javaBinDirName, File javaFile) { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); if (compiler == null) { return false; //fail }/*from w ww. j ava 2 s .c om*/ DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, Locale.getDefault(), Charset.forName("UTF-8")); Iterable<? extends JavaFileObject> compilationUnits = fileManager .getJavaFileObjectsFromFiles(Collections.singletonList(javaFile)); List<String> optionList; optionList = new ArrayList<String>(); optionList.addAll(Arrays.asList("-d", javaBinDirName)); CompilationTask task = compiler.getTask(null, fileManager, diagnostics, optionList, null, compilationUnits); boolean compiled = task.call(); try { fileManager.close(); } catch (IOException e) { return false; } return compiled; }
From source file:org.evosuite.junit.JUnitAnalyzer.java
private static List<File> compileTests(List<TestCase> tests, File dir) { TestSuiteWriter suite = new TestSuiteWriter(); suite.insertAllTests(tests);//from w w w. j a v a 2s . c o m //to get name, remove all package before last '.' int beginIndex = Properties.TARGET_CLASS.lastIndexOf(".") + 1; String name = Properties.TARGET_CLASS.substring(beginIndex); name += "_" + (NUM++) + "_tmp_" + Properties.JUNIT_SUFFIX; //postfix try { //now generate the JUnit test case List<File> generated = suite.writeTestSuite(name, dir.getAbsolutePath(), Collections.EMPTY_LIST); for (File file : generated) { if (!file.exists()) { logger.error("Supposed to generate " + file + " but it does not exist"); return null; } } //try to compile the test cases JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); if (compiler == null) { logger.error("No Java compiler is available"); return null; } DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>(); Locale locale = Locale.getDefault(); Charset charset = Charset.forName("UTF-8"); StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, locale, charset); Iterable<? extends JavaFileObject> compilationUnits = fileManager .getJavaFileObjectsFromFiles(generated); List<String> optionList = new ArrayList<>(); String evosuiteCP = ClassPathHandler.getInstance().getEvoSuiteClassPath(); if (JarPathing.containsAPathingJar(evosuiteCP)) { evosuiteCP = JarPathing.expandPathingJars(evosuiteCP); } String targetProjectCP = ClassPathHandler.getInstance().getTargetProjectClasspath(); if (JarPathing.containsAPathingJar(targetProjectCP)) { targetProjectCP = JarPathing.expandPathingJars(targetProjectCP); } String classpath = targetProjectCP + File.pathSeparator + evosuiteCP; optionList.addAll(Arrays.asList("-classpath", classpath)); CompilationTask task = compiler.getTask(null, fileManager, diagnostics, optionList, null, compilationUnits); boolean compiled = task.call(); fileManager.close(); if (!compiled) { logger.error("Compilation failed on compilation units: " + compilationUnits); logger.error("Classpath: " + classpath); //TODO remove logger.error("evosuiteCP: " + evosuiteCP); for (Diagnostic<?> diagnostic : diagnostics.getDiagnostics()) { if (diagnostic.getMessage(null).startsWith("error while writing")) { logger.error("Error is due to file permissions, ignoring..."); return generated; } logger.error("Diagnostic: " + diagnostic.getMessage(null) + ": " + diagnostic.getLineNumber()); } StringBuffer buffer = new StringBuffer(); for (JavaFileObject sourceFile : compilationUnits) { List<String> lines = FileUtils.readLines(new File(sourceFile.toUri().getPath())); buffer.append(compilationUnits.iterator().next().toString() + "\n"); for (int i = 0; i < lines.size(); i++) { buffer.append((i + 1) + ": " + lines.get(i) + "\n"); } } logger.error(buffer.toString()); return null; } return generated; } catch (IOException e) { logger.error("" + e, e); return null; } }
From source file:org.javascool.compiler.Compiler.java
/** * Lance la compilation des fichiers vers un autre rpertoire. Va compiler les fichier dans un autre rpertoire. * * @param binDirectory Rpertoire cible pour la compilation. Il doit dj exister et tre un dossier * @return Les erreurs de la compilation */// www . j a va 2 s . c om public ArrayList<Diagnostic<? extends JavaFileObject>> compile(File binDirectory) { assertDirectoryExists(binDirectory); final ArrayList<Diagnostic<? extends JavaFileObject>> errors = new ArrayList<Diagnostic<? extends JavaFileObject>>(); ArrayList<String> sourceFiles = new ArrayList<String>(filesToCompile.length); for (File srcFile : filesToCompile) sourceFiles.add(srcDirectory.toURI().relativize(srcFile.toURI()).getPath()); classLoader = new JVSClassLoader(binDirectory); JavaCompiler eclipseCompiler; ArrayList<String> options; eclipseCompiler = new EclipseCompiler(); options = getCompilerOptions(); DiagnosticListener<? super JavaFileObject> diagnosticListener = new DiagnosticListener<JavaFileObject>() { public void report(Diagnostic<? extends JavaFileObject> diagnostic) { errors.add(diagnostic); } }; StandardJavaFileManager fileManager = eclipseCompiler.getStandardFileManager(diagnosticListener, null, Charset.forName("UTF-8")); Iterable<? extends JavaFileObject> compilationUnits = fileManager .getJavaFileObjects(sourceFiles.toArray(new String[sourceFiles.size()])); eclipseCompiler.getTask(null, fileManager, diagnosticListener, options, null, compilationUnits).call(); return errors; }
From source file:org.jsonschema2pojo.integration.util.Compiler.java
public void compile(File directory, String classpath) { JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = javaCompiler.getStandardFileManager(null, null, null); Iterable<? extends JavaFileObject> compilationUnits = fileManager .getJavaFileObjectsFromFiles(findAllSourceFiles(directory)); ArrayList<String> options = new ArrayList<String>(); options.add("-classpath"); options.add(classpath);//from w w w .j av a 2 s .c om options.add("-encoding"); options.add("UTF8"); if (compilationUnits.iterator().hasNext()) { Boolean success = javaCompiler.getTask(null, fileManager, null, options, null, compilationUnits).call(); assertThat("Compilation was not successful, check stdout for errors", success, is(true)); } }
From source file:org.kantega.dogmaticmvc.java.JavaScriptCompiler.java
@Override public Class compile(HttpServletRequest request) { String className = request.getServletPath().substring(1).replace('/', '.'); List<JavaFileObject> compilationUnits = new ArrayList<JavaFileObject>(); for (String path : (Set<String>) servletContext.getResourcePaths("/WEB-INF/dogmatic/")) { if (path.endsWith("java")) { try { String classNAme = path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".")); compilationUnits.add(new JavaSourceFromURL(classNAme, servletContext.getResource(path))); } catch (MalformedURLException e) { throw new RuntimeException(e); }//from www. j av a 2s . c o m } } DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>(); JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); InMemoryJavaFileManager fileManager = new InMemoryJavaFileManager( compiler.getStandardFileManager(null, null, null), new ClassLoaderImpl(getClass().getClassLoader())); String cp = ""; for (ClassLoader cl : Arrays.asList(getClass().getClassLoader(), getClass().getClassLoader().getParent())) { if (cl instanceof URLClassLoader) { URLClassLoader ucl = (URLClassLoader) cl; for (URL url : ucl.getURLs()) { if (cp.length() > 0) { cp += File.pathSeparator; } cp += url.getFile(); } } } List<String> options = new ArrayList(Arrays.asList("-classpath", cp)); JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, options, null, compilationUnits); boolean success = task.call(); StringWriter sw = new StringWriter(); PrintWriter w = new PrintWriter(sw); for (Diagnostic diagnostic : diagnostics.getDiagnostics()) { w.println(diagnostic.getCode()); w.println(diagnostic.getKind()); w.println(diagnostic.getPosition()); w.println(diagnostic.getStartPosition()); w.println(diagnostic.getEndPosition()); w.println(diagnostic.getSource()); w.println(diagnostic.getMessage(null)); } System.out.println("Success: " + success); if (success) { try { return fileManager.getClassLoader(null).loadClass(className); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } else { throw new RuntimeException("Compilation failed: " + sw); } }