可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm about to build my first website in Java with Spring Framework using Spring Boot and it's much easier to build it in jar
, but I have a few questions about it.
What are the differences in general?
In jar
files the views are under /resources/templates
, but in war
file it's under /webapp/WEB-INF/
.
What are the differences? Can I deploy a jar
on an online host?
回答1:
Spring Boot can be told to produce a 'fat JAR' which includes all of your module/service's dependencies and can be run with java -jar <your jar>
. See "Create an executable JAR with Maven" here.
Spring Boot can also be told to produce a WAR file, in which case you'll likely choose to deploy it to a web container such as Tomcat or Jetty.
Plenty more details on Spring Boot deployment here.
回答2:
Depends on your deployment. If you are planning to deploy your application to an existing Java EE Application Server (e.g. Tomcat), then standard approach is to perform a war
build.
When you use fat jar approach, your application will be deployed on embedded application container provided by spring boot. Conduct Deploying Spring Boot Applications for more information.
回答3:
Running spring-boot
application as fat *.jar
It is possible to build so called fat JAR
that is executable *.jar
file with embedded application container (Tomcat
as default option).
There are spring-boot
plugins for various build systems. Here is the one for maven
: spring-boot-maven-plugin
To execute the kind of fat
*.jar
you could simple run command:
java -jar *.jar
Or using spring-boot-maven
goal:
mvn spring-boot:run
Building spring-boot
application as *.war
archive
The other option is to ship your application as old-fashioned war
file. It could be deployed to any servlet container out there. Here is step by step how-to list:
- Change
packaging
to war
(talking about maven's pom.xml
)
- Inherit main
spring-boot
application class from SpringBootServletInitializer
and override SpringApplicationBuilder configure(SpringApplicationBuilder)
method (see javadoc)
- Make sure to set the
scope
of spring-boot-starter-tomcat
as provided
More info in spring-boot documentation
回答4:
I was under the same problem, when I deployed my jar issue free on my local. Then I had to demo it on the server. You can create a war file by changing the pom.xml , tag
<packaging>jar</packaging>
to
<packaging>war</packaging>
and you will have a war file in your target which you can deploy to your server(tomcat in my case)
回答5:
If you need to deploy it in an external container, you'll normally have to create a war file (which doesn't have to be executable).
If you want to use the embedded container, you can choose to create an executable .jar file or an executable .war file. AFAIK the only difference is in the layout of the archive, and therefore normally also the layout of your source repository.
E.g. using standard folder structure with Maven / Gradle, static resources for a .jar will need to be in src/main/resources/static
while for a .jar file they should be in src/main/webapp
.