private static void screenCaptureToFile(AbstractBuild build, AndroidDeviceContext device) throws IOException, InterruptedException { FilePath screencapFile = build.getWorkspace().createTempFile("screencap", ".png"); OutputStream screencapStream = screencapFile.write(); FilterOutputStream replaceFilterStream = new ReplaceFilterOutputStream(screencapStream); device.screenshot(replaceFilterStream); screencapFile.copyTo(new FilePath(build.getArtifactsDir()).child("screencap.png")); }
/** Check the location of the POM, alternate settings file, etc - any file. */ public FormValidation doCheckFileInWorkspace(@QueryParameter String value) throws IOException, ServletException { MavenModuleSetBuild lb = getLastBuild(); if (lb != null) { FilePath ws = lb.getModuleRoot(); if (ws != null) return ws.validateRelativePath(value, true, true); } return FormValidation.ok(); }
/** Check that the provided file is a relative path. And check that it exists, just in case. */ public FormValidation doCheckFileRelative(@QueryParameter String value) throws IOException, ServletException { String v = fixEmpty(value); if ((v == null) || (v.length() == 0)) { // Null values are allowed. return FormValidation.ok(); } if ((v.startsWith("/")) || (v.startsWith("\\")) || (v.matches("^\\w\\:\\\\.*"))) { return FormValidation.error("Alternate settings file must be a relative path."); } MavenModuleSetBuild lb = getLastBuild(); if (lb != null) { FilePath ws = lb.getWorkspace(); if (ws != null) return ws.validateRelativePath(value, true, true); } return FormValidation.ok(); }
private ArgumentListBuilder buildMavenCmdLine( AbstractBuild<?, ?> build, BuildListener listener, EnvVars env) throws IOException, InterruptedException { FilePath mavenHome = getMavenHomeDir(build, listener, env); if (!mavenHome.exists()) { listener.error("Couldn't find Maven home: " + mavenHome.getRemote()); throw new Run.RunnerAbortedException(); } ArgumentListBuilder args = new ArgumentListBuilder(); FilePath mavenBootDir = new FilePath(mavenHome, "boot"); FilePath[] classworldsCandidates = mavenBootDir.list("plexus-classworlds*.jar"); if (classworldsCandidates == null || classworldsCandidates.length == 0) { listener.error("Couldn't find classworlds jar under " + mavenBootDir.getRemote()); throw new Run.RunnerAbortedException(); } FilePath classWorldsJar = classworldsCandidates[0]; // classpath args.add("-classpath"); // String cpSeparator = launcher.isUnix() ? ":" : ";"; args.add(classWorldsJar.getRemote()); // maven home args.addKeyValuePair("-D", "maven.home", mavenHome.getRemote(), false); String buildInfoPropertiesFile = env.get(BuildInfoConfigProperties.PROP_PROPS_FILE); boolean artifactoryIntegration = StringUtils.isNotBlank(buildInfoPropertiesFile); listener .getLogger() .println("Artifactory integration is " + (artifactoryIntegration ? "enabled" : "disabled")); String classworldsConfPath; if (artifactoryIntegration) { args.addKeyValuePair( "-D", BuildInfoConfigProperties.PROP_PROPS_FILE, buildInfoPropertiesFile, false); // use the classworlds conf packaged with this plugin and resolve the extractor libs File maven3ExtractorJar = Which.jarFile(Maven3BuildInfoLogger.class); FilePath actualDependencyDirectory = PluginDependencyHelper.getActualDependencyDirectory(build, maven3ExtractorJar); if (getMavenOpts() == null || !getMavenOpts().contains("-Dm3plugin.lib")) { args.addKeyValuePair("-D", "m3plugin.lib", actualDependencyDirectory.getRemote(), false); } URL classworldsResource = getClass() .getClassLoader() .getResource("org/jfrog/hudson/maven3/classworlds-freestyle.conf"); File classworldsConfFile = new File(URLDecoder.decode(classworldsResource.getFile(), "utf-8")); if (!classworldsConfFile.exists()) { listener.error( "Unable to locate classworlds configuration file under " + classworldsConfFile.getAbsolutePath()); throw new Run.RunnerAbortedException(); } // If we are on a remote slave, make a temp copy of the customized classworlds conf if (Computer.currentComputer() instanceof SlaveComputer) { FilePath remoteClassworlds = build.getWorkspace().createTextTempFile("classworlds", "conf", "", false); remoteClassworlds.copyFrom(classworldsResource); classworldsConfPath = remoteClassworlds.getRemote(); } else { classworldsConfPath = classworldsConfFile.getCanonicalPath(); } } else { classworldsConfPath = new FilePath(mavenHome, "bin/m2.conf").getRemote(); } args.addKeyValuePair("-D", "classworlds.conf", classworldsConfPath, false); // maven opts if (StringUtils.isNotBlank(getMavenOpts())) { String mavenOpts = Util.replaceMacro(getMavenOpts(), build.getBuildVariableResolver()); args.add(mavenOpts); } // classworlds launcher main class args.add(CLASSWORLDS_LAUNCHER); // pom file to build String rootPom = getRootPom(); if (StringUtils.isNotBlank(rootPom)) { args.add("-f", rootPom); } // maven goals args.addTokenized(getGoals()); return args; }