/*
* Licensed 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 com.asual.summer.onejar;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
import org.apache.commons.io.IOUtils;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
/**
*
* @author Rostislav Hristov
*
*/
public class OneJarServer {
public static void main(String[] args) throws Exception {
Server server = new Server(Integer.valueOf(System.getProperty("server.port", "8080")));
server.setHandler(new WebAppContext(getCurrentWarFile(), System.getProperty("server.contextPath", "/")));
try {
server.start();
} catch (Exception e) {
server.stop();
e.printStackTrace();
System.exit(-1);
}
}
private static String getCurrentWarFile() throws IOException {
JarFile jarFile = new JarFile(System.getProperty("java.class.path"));
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()) {
String name = entries.nextElement().getName();
if (name.endsWith(".war")) {
File war = new File(new File(System.getProperty("java.io.tmpdir")), "summer-onejar-" + System.currentTimeMillis() + ".war");
InputStream input = jarFile.getInputStream(new ZipEntry(name));
FileOutputStream output = new FileOutputStream(war);
IOUtils.copy(input, output);
IOUtils.closeQuietly(input);
IOUtils.closeQuietly(output);
war.deleteOnExit();
return war.getAbsolutePath();
}
}
return null;
}
}