"Milos Kleint" <[EMAIL PROTECTED]> writes:
> the second option is true now unfortunately. You need to copy your
> cluster(s) into a pre-packages netbeans platform installation
I really needed the first option, so I've written a `make-zip' task
which grabs clusters, launchers, and config-files from
${netbeans.installation} and zips them all up into
${project.build.directory}/dist/${zipName}.zip.
The contents of the zipfile will run standalone---at least as far as my
limited testing has ascertained.
Jeremy
package org.codehaus.mojo.nbm;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Copy;
import org.apache.tools.ant.taskdefs.Zip;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.selectors.FileSelector;
/**
* Package a branded application into a zip archive along with required
* netbeans modules and launchers.
* @author <a href="mailto:[EMAIL PROTECTED]">Jeremy Hughes</a>
* @goal make-zip
* @aggregator
* @requiresDependencyResolution runtime
*
*/
public class ApplicationZipMojo extends AbstractMojo {
/**
* Name of application zip.
* @parameter default-value="app"
* @required
*/
protected String zipName;
/**
* Directory where zip package should be built.
* @parameter default-value="${project.build.directory}/dist"
* @required
*/
protected String distDir;
/**
* Directory where the module(s)' netbeans cluster(s) are located.
* Is related to nbm:cluster goal.
* @parameter default-value="${project.build.directory}/netbeans_clusters"
* @required
*/
protected String clusterBuildDir;
/**
* Directory where the NetBeans platform/IDE installation is.
* Denotes the root directory of netbeans installation.
* @parameter expression="${netbeans.installation}"
* @required
*/
protected String netbeansInstallation;
/**
* The branding token for the application based on NetBeans platform.
* @parameter expression="${netbeans.branding.token}"
* @required
*/
protected String brandingToken;
/**
* List of enabled clusters. At least platform cluster needs to be
* included.
* @parameter
* @required
*/
protected List/*<String>*/ enabledClusters;
/**
*
*/
private Map matchers = new HashMap();
/**
*
*/
private Project antProject;
/**
*
* @throws org.apache.maven.plugin.MojoExecutionException
* @throws org.apache.maven.plugin.MojoFailureException
*/
public void execute() throws MojoExecutionException, MojoFailureException {
antProject = new Project();
antProject.init();
File clusterRoot = new File(clusterBuildDir);
if (!clusterRoot.exists())
throw new MojoExecutionException("There are no additional clusters in " + clusterBuildDir);
// Make sure the final cluster list is numbered.
enabledClusters = (enabledClusters == null) ? new ArrayList() : enabledClusters;
Iterator it = enabledClusters.iterator();
while (it.hasNext()) {
String clus = (String) it.next();
matchers.put(clus, Pattern.compile(clus + "(\\d)*"));
}
List nbClusters = findClusters(new File(netbeansInstallation).listFiles());
List appClusters = findClusters(clusterRoot.listFiles());
//if (platform == null)
// throw new MojoExecutionException("Cannot find platform* cluster within NetBeans installation at " + netbeansInstallation);
if (matchers.size() > 0) {
getLog().error("Cannot find following clusters, ignoring:");
it = matchers.keySet().iterator();
while (it.hasNext())
getLog().error(" " + it.next());
}
System.out.println("CLUSTERS:" + enabledClusters.size());
String appDir = distDir + File.separator + zipName;
new File(appDir).mkdirs();
String etcDir = appDir + File.separator + "etc";
String binDir = appDir + File.separator + "bin";
new File(etcDir).mkdir();
new File(binDir).mkdir();
Writer clusterFile = null;
String harnessDir = netbeansInstallation + File.separator + "harness" + File.separator;
String nbEtcDir = harnessDir + "etc" + File.separator;
String nbBinDir = harnessDir + "launchers" + File.separator;
try {
copyFile(
nbEtcDir + "app.conf",
etcDir + File.separator + zipName + ".conf");
copyFile(
nbEtcDir + "applicationIcon.icns",
etcDir + File.separator + "applicationIcon.icns");
copyFile(
nbEtcDir + "Info.plist",
etcDir + File.separator + "Info.plist");
copyFile(
nbBinDir + "app.sh",
binDir + File.separator + zipName);
Runtime.getRuntime().exec("chmod 755 " + binDir + File.separator + zipName);
copyFile(
nbBinDir + "app.exe",
binDir + File.separator + zipName + ".exe");
copyFile(
nbBinDir + "app_w.exe",
binDir + File.separator + zipName + "_w.exe");
clusterFile = new FileWriter(etcDir + File.separator + zipName + ".clusters");
for (int i = 0; i < nbClusters.size(); i++)
clusterFile.write(((File) nbClusters.get(i)).getName() + "\n");
for (int i = 0; i < appClusters.size(); i++)
clusterFile.write(((File) appClusters.get(i)).getName() + "\n");
clusterFile.close();
} catch (FileNotFoundException e) {
throw new MojoExecutionException("Config file does not exist.", e);
} catch (IOException e) {
throw new MojoExecutionException("Error creating config files.", e);
}
try {
for (int i = 0; i < nbClusters.size(); i++) {
File clusterDir = (File) nbClusters.get(i);
String name = clusterDir.getName();
copyDirectory(clusterDir, new File(appDir + File.separator + name));
}
for (int i = 0; i < appClusters.size(); i++) {
File clusterDir = (File) appClusters.get(i);
String name = clusterDir.getName();
copyDirectory(clusterDir, new File(appDir + File.separator + name));
}
} catch (IOException e) {
throw new MojoExecutionException("Copying clusters failed.", e);
}
try {
Zip zipTask = (Zip) antProject.createTask("zip");
zipTask.setBasedir(new File(distDir));
zipTask.setIncludes(zipName + "/**");
zipTask.setDestFile(new File(distDir + File.separator + zipName + ".zip"));
zipTask.execute();
} catch (BuildException e) {
throw new MojoExecutionException("Zipping application directory failed.", e);
}
}
private List findClusters(File[] files) {
List clusters = new ArrayList();
for (int i = 0; i < files.length; i++)
if (files[i].isDirectory()) {
String folderName = files[i].getName();
Iterator it2 = matchers.entrySet().iterator();
while (it2.hasNext()) {
Map.Entry en = (Map.Entry)it2.next();
Pattern match = (Pattern) en.getValue();
if (match.matcher(folderName).matches()) {
clusters.add(files[i]);
it2.remove();
break;
}
}
}
return clusters;
}
private void copyDirectory(File from, File to)
throws IOException {
Copy copyTask = (Copy) antProject.createTask("copy");
copyTask.setTodir(to);
FileSet fset = new FileSet();
fset.setDir(from);
copyTask.addFileset(fset);
copyTask.execute();
}
private static void copyFile(String in, String out) throws IOException {
copyResource(new FileInputStream(in), new FileOutputStream(out));
}
private static void copyResource(InputStream in, OutputStream out) throws IOException {
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0)
out.write(buf, 0, len);
in.close();
out.close();
}
}
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email