2017-08-25 58 views
0

我已经经历了一些教程阅读,包Spring的web项目到罐子(尤伯杯JAR)无弹簧启动(非弹簧启动项目)

https://spring.io/guides/gs/spring-boot/

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-gradle-plugin

我也看到有人问here,但它使用Maven,我试图使用Gradle,但它不起作用。

我真的不能在非Spring引导项目中工作,所以我的问题是,是否可以在非Spring引导项目中打包uber-jar?

我的Spring项目是正常的MVC项目,由Gradle构建,是否有任何Gradle插件可以实现我的目标?或者实际上,Spring启动插件可以在非Spring启动项目上执行它?

+0

请详细说明一下你为什么要这么做? –

+0

@ZakiAnwarHamdani我喜欢spring-boot超级jar包的功能,但我们的网络应用程序现在是普通的spring-mvc项目,我不允许将它转换为spring-boot。我需要将jar文件传递给非IT人员,以测试谁不安装tomcat或任何独立服务器。如果他们只是用可嵌入的Java容器向可执行jar发出命令,那就太好了。 – GMsoF

回答

0

你可以使用embedded tomcat来做到这一点。可能是本文将帮助你Create a Java Web Application Using Embedded Tomcat
这里是我的TomcatBootstrap代码

public class TomcatBootstrap { 
private static final Logger LOG = LoggerFactory.getLogger(TomcatBootstrap.class); 
public static void main(String[] args) throws Exception{ 
    System.setProperty("tomcat.util.scan.StandardJarScanFilter.jarsToSkip", "*.jar"); 
    int port =Integer.parseInt(System.getProperty("server.port", "8080")); 
    String contextPath = System.getProperty("server.contextPath", ""); 
    String docBase = System.getProperty("server.docBase", getDefaultDocBase()); 
    LOG.info("server port : {}, context path : {},doc base : {}",port, contextPath, docBase); 
    Tomcat tomcat = createTomcat(port,contextPath, docBase); 
    tomcat.start(); 
    Runtime.getRuntime().addShutdownHook(new Thread() { 
     @Override 
     public void run(){ 
      try { 
       tomcat.stop(); 
      } catch (LifecycleException e) { 
       LOG.error("stoptomcat error.", e); 
      } 
     } 
    }); 
    tomcat.getServer().await(); 
} 

private static String getDefaultDocBase() { 
    File classpathDir = new File(Thread.currentThread().getContextClassLoader().getResource(".").getFile()); 
    File projectDir =classpathDir.getParentFile().getParentFile(); 
    return new File(projectDir,"src/main/webapp").getPath(); 
} 
private static Tomcat createTomcat(int port,String contextPath, String docBase) throws Exception{ 
    String tmpdir = System.getProperty("java.io.tmpdir"); 
    Tomcat tomcat = new Tomcat(); 
    tomcat.setBaseDir(tmpdir); 
    tomcat.getHost().setAppBase(tmpdir); 
    tomcat.getHost().setAutoDeploy(false); 
    tomcat.getHost().setDeployOnStartup(false); 
    tomcat.getEngine().setBackgroundProcessorDelay(-1); 
    tomcat.setConnector(newNioConnector()); 
    tomcat.getConnector().setPort(port); 
    tomcat.getService().addConnector(tomcat.getConnector()); 
    Context context =tomcat.addWebapp(contextPath, docBase); 
    StandardServer server =(StandardServer) tomcat.getServer(); 
    //APR library loader. Documentation at /docs/apr.html 
    server.addLifecycleListener(new AprLifecycleListener()); 
    //Prevent memory leaks due to use of particularjava/javax APIs 
    server.addLifecycleListener(new JreMemoryLeakPreventionListener()); 
    return tomcat; 
} 

private static Connector newNioConnector() { 
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); 
    Http11NioProtocol protocol =(Http11NioProtocol) connector.getProtocolHandler(); 
    return connector; 
} 

}