blob: 6b2da531918284d53968272686253e7b0bd57436 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.flex.utilities.converter.deployer.maven;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* Date: 11.08.12
* Time: 18:17
*/
public class MavenDeployer {
private String directory;
private String repositoryId;
private String url;
private String mvn;
/**
* @param parameters
*/
public MavenDeployer(String[] parameters) {
super();
this.directory = parameters[0];
this.repositoryId = parameters[1];
this.url = parameters[2];
this.mvn = parameters[3];
}
public static void main(String[] args) {
if (args.length != 4) {
printUsage();
System.exit(0);
}
MavenDeployer deployer = new MavenDeployer(args);
deployer.start();
}
private static void printUsage() {
System.out.println("\nUsage: java -cp flex-sdk-converter-1.0.jar org.apache.flex.utilities.converter.deployer.maven.SDKDeployer \"directory\" \"repositoryId\" \"url\" \"mvn\"\n");
System.out.println("The org.apache.flex.utilities.converter.deployer.maven.SDKDeployer needs 4 ordered parameters separated by spaces:");
System.out.println("\t1- directory: The path to the directory to deploy.");
System.out.println("\t2- repositoryId: Server Id to map on the <id> under <server> section of settings.xml.");
System.out.println("\t3- url: URL where the artifacts will be deployed.");
System.out.println("\t4- mvn: The path to the mvn.bat / mvn.sh.");
}
private void start() {
try {
File dir = new File(directory);
doDir(dir);
} catch (Throwable e) {
e.printStackTrace();
}
}
private void doDir(File dir) throws IOException, InterruptedException {
File[] listFiles = dir.listFiles(new PomFilter());
if (listFiles != null) {
for (File pom : listFiles) {
doPom(pom);
}
}
File[] listDirs = dir.listFiles(new DirFilter());
if (listDirs != null) {
for (File subdir : listDirs) {
doDir(subdir);
}
}
}
private void doPom(File pom) throws IOException, InterruptedException {
File base = pom.getParentFile();
final String fileName = pom.getName();
String artifactName = fileName.substring(0, fileName.lastIndexOf("-"));
if (artifactName != null) {
File artifacts[] = new File(pom.getParent()).listFiles(new ArtifactFilter());
List<String> processCmdBase = new ArrayList<String>(10);
processCmdBase.add(mvn);
processCmdBase.add("deploy:deploy-file");
processCmdBase.add("-DrepositoryId=" + repositoryId);
processCmdBase.add("-Durl=" + url);
ProcessBuilder processBuilder = null;
String packaging;
String classifier = null;
List<String> processCmd = null;
if (artifacts != null && artifacts.length > 0) {
for (File artifact : artifacts) {
processCmd = new ArrayList<String>(10);
processCmd.addAll(processCmdBase);
classifier = packaging = null;
artifactName = artifact.getName();
packaging = (artifactName.endsWith("rb.swc")) ? "rb.swc" : artifactName.substring(artifactName.lastIndexOf(".") + 1);
try {
classifier = artifactName
.substring(artifactName.indexOf(base.getName()) + base.getName().length() + 1, artifactName.length() - packaging.length() - 1);
} catch (StringIndexOutOfBoundsException ex) {/*has no classifier*/}
processCmd.add("-Dfile=" + artifact.getAbsolutePath());
processCmd.add("-DpomFile=" + pom.getAbsolutePath());
if (classifier != null && classifier.length() > 0) {
processCmd.add("-Dclassifier=" + classifier);
}
processCmd.add("-Dpackaging=" + packaging);
processBuilder = new ProcessBuilder(processCmd);
exec(processBuilder.start());
}
} else {
processCmd = new ArrayList<String>(10);
processCmd.addAll(processCmdBase);
processCmd.add("-Dfile=" + pom.getAbsolutePath());
processCmd.add("-DpomFile=" + pom.getAbsolutePath());
processBuilder = new ProcessBuilder(processCmd);
exec(processBuilder.start());
}
}
}
private void exec(Process p) throws InterruptedException, IOException {
String line;
BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while ((line = bri.readLine()) != null) {
System.out.println(line);
}
while ((line = bre.readLine()) != null) {
System.out.println(line);
}
p.waitFor();
bri.close();
bre.close();
System.out.println("Done.");
}
private class PomFilter implements java.io.FileFilter {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".pom");
}
}
private class DirFilter implements java.io.FileFilter {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}
private class ArtifactFilter implements java.io.FileFilter {
@Override
public boolean accept(File pathname) {
return !pathname.getName().endsWith(".pom");
}
}
}