private void runJavaProcessInProject( TmcProjectInfo projectInfo, ClassPath classPath, String taskName, List<String> args, InputOutput inOut, BgTaskListener<ProcessResult> listener) { FileObject projectDir = projectInfo.getProjectDir(); JavaPlatform platform = JavaPlatform.getDefault(); // Should probably use project's configured platform instead FileObject javaExe = platform.findTool("java"); if (javaExe == null) { throw new IllegalArgumentException(); } // TMC server packages this with every exercise for our convenience. // True even for Maven exercises, at least until NB's Maven API is published. ClassPath testRunnerClassPath = getTestRunnerClassPath(projectInfo); if (testRunnerClassPath != null) { classPath = ClassPathSupport.createProxyClassPath(classPath, testRunnerClassPath); } String[] command = new String[3 + args.size()]; command[0] = FileUtil.toFile(javaExe).getAbsolutePath(); command[1] = "-cp"; command[2] = classPath.toString(ClassPath.PathConversionMode.WARN); System.arraycopy(args.toArray(new String[args.size()]), 0, command, 3, args.size()); log.info(StringUtils.join(command, ' ')); ProcessRunner runner = new ProcessRunner(command, FileUtil.toFile(projectDir), inOut); BgTask.start(taskName, runner, listener); }
private File endorsedLibsPath(final TmcProjectInfo projectInfo) { String path = FileUtil.toFile(projectInfo.getProjectDir()).getAbsolutePath() + File.separatorChar + "lib" + File.separatorChar + "endorsed"; return new File(path); }
private FileObject findTestDir(TmcProjectInfo projectInfo) { // Ideally we'd get these paths from NB, but let's assume the conventional ones for now. FileObject root = projectInfo.getProjectDir(); switch (projectInfo.getProjectType()) { case JAVA_SIMPLE: return root.getFileObject("test"); case JAVA_MAVEN: return getSubdir(root, "src", "test", "java"); default: throw new IllegalArgumentException("Unknown project type"); } }
private ClassPath getTestRunnerClassPath(TmcProjectInfo projectInfo) { FileObject projectDir = projectInfo.getProjectDir(); FileObject testrunnerDir = projectDir.getFileObject("lib/testrunner"); if (testrunnerDir != null) { FileObject[] files = testrunnerDir.getChildren(); ArrayList<URL> urls = new ArrayList<URL>(); for (FileObject file : files) { URL url = FileUtil.urlForArchiveOrDir(FileUtil.toFile(file)); if (url != null) { urls.add(url); } } return ClassPathSupport.createClassPath(urls.toArray(new URL[0])); } else { return null; } }