java - JAR 文件可在 Windows 上运行,但不能在 Linux 上运行
问题描述
我在 Maven 上创建了一个 JAR 文件。此应用程序包含 Spring Boot 和 Vaadin。我可以在 Windows 上运行它。当我尝试在 Linux 上运行时,它说 Tomcat 无法启动。
我想知道这是否是 OpenJDK 的问题,因为这是我现在看到的唯一区别。在 Windows 上,我使用 Oracle JDK 8。
我尝试在 AWS、Docker、Ubuntu 上运行。结果相同。Windows 10 - 好的。
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:156) ~[spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544) ~[spring-context-5.2.0.RELEASE.jar!/:5.2.0.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE]
at no.safe4.dynamodbcsvui.Application.main(Application.java:14) [classes!/:1.0]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_111-internal]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_111-internal]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111-internal]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111-internal]
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [dynamodb-csv-ui-1.0.jar:1.0]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [dynamodb-csv-ui-1.0.jar:1.0]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) [dynamodb-csv-ui-1.0.jar:1.0]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) [dynamodb-csv-ui-1.0.jar:1.0]
引起:org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:126) ~[spring-boot-2.2 .0.RELEASE.jar!/:2.2.0.RELEASE] 在 org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:88) ~[spring-boot-2.2.0.RELEASE.jar !/:2.2.0.RELEASE] 在 org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:438) ~[spring-boot-2.2.0.RELEASE.jar!/:2.2. 0.RELEASE] 在 org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:191) ~[spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE] 在org.springframework.boot.web.servlet.context。ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:180) ~[spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext .java:153) ~[spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE] ...省略了16个常见框架原因:java.lang.IllegalStateException: StandardEngine[Tomcat].StandardHost[ localhost].TomcatEmbeddedContext[] 无法在 org.springframework.boot.web.embedded.tomcat.TomcatWebServer.rethrowDeferredStartupExceptions(TomcatWebServer.java:171) ~[spring-boot-2.2.0.RELEASE.jar!/:2.2 启动。 0.RELEASE] 在 org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:110) ~[spring-boot-2.2.0.RELEASE.jar!/:2.2.0.RELEASE]org .springframework.context.ApplicationContextException:: 找不到命令
解决方案
我发现了问题/解决方案:
1) 将 debug=true 添加到 application.properties
2)运行后我发现它:
Caused by: java.lang.IllegalStateException: Running project in development mode with no access to folder...
改为在生产模式下构建项目,请参阅https://vaadin.com/docs/v14/flow/production/tutorial-production-mode-basic.html
3) 在 Vaadin GitHub 上,有一种方法可以在生产环境中创建 JAR 文件:
mvn clean package -Pproduction
这解决了问题并且应用程序正在运行。
推荐阅读
- java - 左对齐使用 printf 右对齐字符串的第一行
- excel - 如果Excel中的单元格为空白,如何隐藏行?并在下面添加新行
- laravel - 数据库查询在本地主机上工作正常,但在服务器上不能正常工作
- python - 在循环中根据字符将字符串拆分为数组
- javascript - 全球连续3分钟倒计时
- c# - 试图创建一个唯一的随机数。如果数据库中的数字退出再次生成并向数据库添加值
- android - Google Play - 提交例外并推出提交
- java - 在 VS Code 中导入 .jar 库
- java - 如何将此java代码转换为流程图
- varnish - 使用 MPEG-TS 流量清漆