maven - 如何构建 WAR 文件以从 JHipster Spring Boot 项目部署到 Tomcat 上?

标签 maven tomcat spring-boot jhipster

我使用 JHipster 创建了一个项目,但对其进行了更改并添加了一些内容。当从 IDE (Intellij) 作为 Spring Boot 项目运行时,它运行正常,但是当尝试构建 WAR 并将其部署在 Tomcat 7 上时,它会失败并显示以下堆栈跟踪:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [org/springframework/boot/autoconfigure/transaction/jta/JndiJtaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No JTA UserTransaction available - specify either 'userTransaction' or 'userTransactionName' or 'transactionManager' or 'transactionManagerName'
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:543)
        ... 41 more
Caused by: java.lang.IllegalStateException: No JTA UserTransaction available - specify either 'userTransaction' or 'userTransactionName' or 'transactionManager' or 'transactionManagerName'
        at org.springframework.transaction.jta.JtaTransactionManager.checkUserTransactionAndTransactionManager(JtaTransactionManager.java:494)
        at org.springframework.transaction.jta.JtaTransactionManager.afterPropertiesSet(JtaTransactionManager.java:436)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
        ... 51 more

我也尝试过:

mvn -Pprod 清理包

但这也失败了:

Running "karma:unit" (karma) task
INFO [karma]: Karma v0.12.35 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.8 (Windows 7 0.0.0)]: Connected on socket gsod2iXnNubgdt_gVHUZ with id 68003640
PhantomJS 1.9.8 (Windows 7 0.0.0) ERROR
  ReferenceError: Can't find variable: google
  at C:/Dev/workspaces/myProject/src/main/webapp/scripts/components/view/geoChart.directive.js:9
PhantomJS 1.9.8 (Windows 7 0.0.0) ERROR
  ReferenceError: Can't find variable: google
  at C:/Dev/workspaces/myProject/src/main/webapp/scripts/components/view/geoChart.directive.js:9

PhantomJS 1.9.8 (Windows 7 0.0.0): Executed 0 of 0 ERROR (1.301 secs / 0 secs)

Warning: Task "karma:unit" failed. Use --force to continue.

Aborted due to warnings.

我添加了 Google GeoChart,这似乎导致了问题。

我想要得到的是一个可以部署在 Tomcat 上的经典 WAR,但我显然做错了什么,而且我不知道是什么。

谢谢。

最佳答案

您使用的是 *.war.original 还是 *.war?

我认为您需要将 *.war.original 重命名为 .war 文件后将其放入 tomcat 中。

请参阅文档:http://jhipster.github.io/production/

To package the application as a "production" WAR, type:

mvn -Pprod package

Or when using Gradle:

gradlew -Pprod bootRepackage

This will generate two files (if your application is called "jhipster"):

target/jhipster-0.0.1-SNAPSHOT.war target/jhipster-0.0.1-SNAPSHOT.war.original The first one is an executable WAR file (see next section to run it). It can also be deployed on an application server, but as it includes the Tomcat runtime libs, you will probably get some warnings, that's why we recommend you use the second, ".original" file if you want to deploy JHipster on an application server.

Once you have deployed you WAR file on your application server:

It will use by default the "dev" profile It can run in "production mode" if you trigger the "prod" profile (there are several ways to trigger a Spring profile, for example you can add -Dspring.profiles.active=prod to your JAVA_OPTS when running your server)

关于maven - 如何构建 WAR 文件以从 JHipster Spring Boot 项目部署到 Tomcat 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783588/

相关文章:

maven - Docker多阶段构建和上一阶段的安装/共享

java - 如何使用 Maven 安装 Slick2d?

java - 通过 Ant 运行测试时出现 NoClassDefFoundError 但在 Tomcat 中部署时工作正常

performance - 什么会导致Tomcat(v8)周期性出现CPU峰值

mysql - Spring Boot - Hibernate 未正确保存日期

Maven 测试依赖关系从 uberjar 中删除传递编译依赖关系

java - 如何在使用 JAXB 后在 XML 中声明属性的顺序,无论是在 Maven 中还是在其他地方

java - 如何从部署在其上的 Java Web 应用程序访问 tomcat 日志文件?

spring-boot - Eureka注册Https微服务

spring-boot - Spring Boot gzip 压缩 - 响应大小没有减少