Search in sources :

Example 1 with ArchiveOutputStream

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);
}
Also used : Options(org.apache.openejb.loader.Options) JarLocation(org.apache.openejb.loader.JarLocation) Properties(java.util.Properties) ExecRunner(org.apache.openejb.maven.plugin.runner.ExecRunner) StringWriter(java.io.StringWriter) LoaderRuntimeException(org.apache.openejb.loader.LoaderRuntimeException) JavaSecurityManagers(org.apache.openejb.util.JavaSecurityManagers) Files(org.apache.openejb.loader.Files) RemoteServer(org.apache.openejb.config.RemoteServer) JarArchiveEntry(org.apache.commons.compress.archivers.jar.JarArchiveEntry) IO(org.apache.openejb.loader.IO) Join(org.apache.openejb.util.Join) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Pipe(org.apache.openejb.util.Pipe) Manifest(org.codehaus.plexus.archiver.jar.Manifest) FileInputStream(java.io.FileInputStream) ArchiveStreamFactory(org.apache.commons.compress.archivers.ArchiveStreamFactory) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) QuickServerXmlParser(org.apache.tomee.util.QuickServerXmlParser) ByteArrayInputStream(java.io.ByteArrayInputStream) FileOutputStream(java.io.FileOutputStream) Zips(org.apache.openejb.loader.Zips) ArchiveOutputStream(org.apache.commons.compress.archivers.ArchiveOutputStream)

Aggregations

ByteArrayInputStream (java.io.ByteArrayInputStream)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 FileInputStream (java.io.FileInputStream)1 FileOutputStream (java.io.FileOutputStream)1 StringWriter (java.io.StringWriter)1 Properties (java.util.Properties)1 ArchiveOutputStream (org.apache.commons.compress.archivers.ArchiveOutputStream)1 ArchiveStreamFactory (org.apache.commons.compress.archivers.ArchiveStreamFactory)1 JarArchiveEntry (org.apache.commons.compress.archivers.jar.JarArchiveEntry)1 OpenEJBRuntimeException (org.apache.openejb.OpenEJBRuntimeException)1 RemoteServer (org.apache.openejb.config.RemoteServer)1 Files (org.apache.openejb.loader.Files)1 IO (org.apache.openejb.loader.IO)1 JarLocation (org.apache.openejb.loader.JarLocation)1 LoaderRuntimeException (org.apache.openejb.loader.LoaderRuntimeException)1 Options (org.apache.openejb.loader.Options)1 Zips (org.apache.openejb.loader.Zips)1 ExecRunner (org.apache.openejb.maven.plugin.runner.ExecRunner)1 JavaSecurityManagers (org.apache.openejb.util.JavaSecurityManagers)1 Join (org.apache.openejb.util.Join)1