use of org.apache.commons.compress.archivers.ArchiveOutputStream in project tomee by apache.
the class ExecMojo method createExecutableJar.
private void createExecutableJar() throws Exception {
mkdirs(execFile.getParentFile());
final Properties config = new Properties();
config.put("distribution", distributionName);
config.put("workingDir", runtimeWorkingDir);
config.put("command", DEFAULT_SCRIPT.equals(script) ? (skipArchiveRootFolder ? "" : catalinaBase.getName() + "/") + DEFAULT_SCRIPT : script);
final List<String> jvmArgs = generateJVMArgs();
final String catalinaOpts = toString(jvmArgs, " ");
config.put("catalinaOpts", catalinaOpts);
config.put("timestamp", Long.toString(System.currentTimeMillis()));
// java only
final String cp = getAdditionalClasspath();
if (cp != null) {
config.put("additionalClasspath", cp);
}
config.put("shutdownCommand", tomeeShutdownCommand);
int i = 0;
boolean encodingSet = catalinaOpts.contains("-Dfile.encoding");
for (final String jvmArg : jvmArgs) {
config.put("jvmArg." + i++, jvmArg);
encodingSet = encodingSet || jvmArg.contains("-Dfile.encoding");
}
if (!encodingSet) {
// forcing encoding for launched process to be able to read conf files
config.put("jvmArg." + i, "-Dfile.encoding=UTF-8");
}
if (preTasks != null) {
config.put("preTasks", toString(preTasks, ","));
}
if (postTasks != null) {
config.put("postTasks", toString(postTasks, ","));
}
config.put("waitFor", Boolean.toString(waitFor));
// create an executable jar with main runner and zipFile
final FileOutputStream fileOutputStream = new FileOutputStream(execFile);
final ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.JAR, fileOutputStream);
{
// distrib
os.putArchiveEntry(new JarArchiveEntry(distributionName));
final FileInputStream in = new FileInputStream(zipFile);
try {
IOUtils.copy(in, os);
os.closeArchiveEntry();
} finally {
IOUtil.close(in);
}
}
{
// config
os.putArchiveEntry(new JarArchiveEntry("configuration.properties"));
final StringWriter writer = new StringWriter();
config.store(writer, "");
IOUtils.copy(new ByteArrayInputStream(writer.toString().getBytes("UTF-8")), os);
os.closeArchiveEntry();
}
{
// Manifest
final Manifest manifest = new Manifest();
final Manifest.Attribute mainClassAtt = new Manifest.Attribute();
mainClassAtt.setName("Main-Class");
mainClassAtt.setValue(runnerClass);
manifest.addConfiguredAttribute(mainClassAtt);
final ByteArrayOutputStream baos = new ByteArrayOutputStream(512);
manifest.write(baos);
os.putArchiveEntry(new JarArchiveEntry("META-INF/MANIFEST.MF"));
IOUtils.copy(new ByteArrayInputStream(baos.toByteArray()), os);
os.closeArchiveEntry();
}
{
// Main + utility
for (final Class<?> clazz : asList(ExecRunner.class, Files.class, Files.PatternFileFilter.class, Files.DeleteThread.class, Files.FileRuntimeException.class, Files.FileDoesNotExistException.class, Files.NoopOutputStream.class, LoaderRuntimeException.class, Pipe.class, IO.class, Zips.class, JarLocation.class, RemoteServer.class, RemoteServer.CleanUpThread.class, OpenEJBRuntimeException.class, Join.class, QuickServerXmlParser.class, Options.class, Options.NullLog.class, Options.TomEEPropertyAdapter.class, Options.NullOptions.class, Options.Log.class, JavaSecurityManagers.class)) {
addToJar(os, clazz);
}
}
addClasses(additionalClasses, os);
addClasses(preTasks, os);
addClasses(postTasks, os);
IOUtil.close(os);
IOUtil.close(fileOutputStream);
}
Aggregations