当前位置: 首页 > 知识库问答 >
问题:

将Spring web项目打包到没有Spring boot的jar(uber-jar)中(非spring-boot项目)

贺恩
2023-03-14

我读过一些教程,

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

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

共有1个答案

颜欣怡
2023-03-14

您可以使用嵌入式Tomcat来完成这项工作。本文可能会帮助您使用嵌入式Tomcat
创建Java Web应用程序,下面是我的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;
}

}
 类似资料:
  • 我有一个由3个模块组成的分级项目: (无依赖项) (依赖于) (取决于两个模块)

  • 问题内容: 在我的J2EE项目中,我有几个依赖关系,在任何Maven存储库中都不可用,因为它们是专有库。这些库需要在运行时可用,因此必须将其复制到target /…/ WEB-INF / lib … 现在,我在POM中将它们列为系统依赖项,但是使用这种方法的问题是,在编译过程中没有将它们复制到目标版本中。而且这种方法也不是很优雅。 那么将它们集成到Maven中的最佳方法是什么? 注意:我不想创建自

  • 我跟踪了POM 当我在Intellij IDEA中从Maven插件运行Maven包时,我在Intellij控制台窗口上看到以下输出: 进程已完成,退出代码为%1 我有调试级别的maven日志,但仍然不清楚为什么JAR没有创建?

  • **新到分级 我有一个需求,需要使用一个现有的spring boot项目(它安装在本地maven存储库中)作为另一个项目(spring boot gradle项目)中的依赖项。 使用mavenLocal我能够成功地运行和构建gradle项目,但是当我试图使用其他项目中存在的任何类时,我就无法导入它。 我如何使用这个分级项目中的maven项目?

  • 我正在使用一些apache HttpClient jar,所以我把它们放在我的项目的lib目录中,当Netbeans编译项目时,它复制lib并生成一个项目jar到dist目录中,但是当我使用webstart运行项目时,我需要将项目jar和lib复制到Tomcat的根目录中,我想知道Netbeans是否可以生成一个包含lib目录中所有jar的项目jar,这样我就不必将项目jar和lib目录复制到To

  • 一个spring boot的项目,在idea上可以正常运行,打包成jar包后运行出错,报错如下: 网上的各种方法都试过了,包括加代码、改代码、换一种方式打包,都不行