1

通过简单的Maven原型创建Vaadin应用程序时:

mvn -B archetype:generate -DarchetypeGroupId=com.vaadin -DarchetypeArtifactId=vaadin-archetype-application -DarchetypeVersion=8.0.6 -DgroupId=org.test -DartifactId=vaadin-app -Dversion=1.0-SNAPSHOT

…并通过捆绑的Jetty servlet 容器运行,我构建的 Web 应用程序存储在哪里?是否正在生成WAR 文件?如果有,在哪里?


我在带有 IntelliJ 2017.1.3 的 macOS Sierra 10.12.5 上使用 Java 8 Update 131。

4

3 回答 3

2

据我所知,正如文档所建议的那样,在运行时mvn jetty:run,没有构建任何工件。相反,使用它自己的内部机制,maven jetty 插件将从target\classes

运行目标在不必构建到 WAR 中的 webapp 上运行。相反,Jetty 从其来源部署 webapp。它在 Maven 默认项目位置中查找 webapp 的组成部分,尽管您可以在插件配置中覆盖这些部分。例如,默认情况下它会查找:

  • ${project.basedir}/src/main/webapp 中的资源
  • ${project.build.outputDirectory} 中的类
  • ${project.basedir}/src/main/webapp/WEB-INF/ 中的 web.xml

该插件会自动确保在部署之前重建类并保持最新。如果您更改了类的源并且您的 IDE 会在后台自动编译它,则插件会选择更改的类。

您无需将 webapp 组装成 WAR,从而在开发周期中节省时间。调用后,您可以将插件配置为连续运行,扫描项目中的更改并在必要时自动执行热重新部署。您所做的任何更改都会立即反映在 Jetty 的运行实例中,让您快速从编码跳转到测试,而不是经历以下循环:编码、编译、重新组装、重新部署、测试。

...并且(可能)使用来自 maven repo 的依赖项

*注意 正在运行的 Jetty 实例及其部署的 webapp 的类路径由 Maven 管理,可能与您期望的不完全一致。例如:一个 webapp 的依赖 jar 可能是通过本地存储库引用的,而不是 WEB-INF/lib 目录。

运行插件时,也可以在日志中观察到上面提到的一些信息(运行 maven,-X又名调试输出 on,提供更多信息):

[INFO] Configuring Jetty for project: vaadin-app
[INFO] webAppSourceDirectory not set. Trying src\main\webapp
[INFO] Reload Mechanic: automatic
[INFO] Classes = D:\tmp\test\vaadin-app\target\classes
[DEBUG] Starting Jetty Server ...
[INFO] Context path = /
[INFO] Tmp directory = D:\tmp\test\vaadin-app\target\tmp
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
[INFO] Web overrides =  none
[DEBUG] Adding artifact vaadin-server-8.0.6.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact vaadin-sass-compiler-0.9.13.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact sac-1.3.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact flute-1.3.0.gg2.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact vaadin-shared-8.0.6.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact jsoup-1.8.3.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact gentyref-1.2.0.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact vaadin-push-8.0.6.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact atmosphere-runtime-2.4.5.vaadin2.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact vaadin-slf4j-jdk14-1.6.1.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact vaadin-client-compiled-8.0.6.jar with scope compile for WEB-INF/lib 
[DEBUG] Adding artifact vaadin-themes-8.0.6.jar with scope compile for WEB-INF/lib 
[INFO] web.xml file = null
[INFO] Webapp directory = D:\tmp\test\vaadin-app\src\main\webapp
[INFO] Started Jetty Server

但是,如果您想构建和部署打包战争或爆炸战争,您可以使用jetty:run-war

这个目标首先将您的 webapp 打包为 WAR 文件,然后将其部署到 Jetty。如果您设置非零 scanInterval,Jetty 会监视您的 pom.xml 和 WAR 文件;如果其中任何一个发生变化,它就会重新部署战争。

...和/或jetty:run-exploded

run-exploded 目标首先将您的 webapp 组装成一个展开的 WAR 文件,然后将其部署到 Jetty。如果您设置非零 scanInterval,Jetty 会监视您的 pom.xml、`WEB-INF/lib、WEB-INF/ 和 WEB-INF/web.xml 以进行更改并在必要时重新部署。

于 2017-05-29T08:57:36.867 回答
1

之后在target文件夹中mvn install

mvn install在 Maven 中执行后,可以在“target”文件夹中找到一个.war文件。

例如……请参阅此项目的屏幕截图,该项目TryAgain的文件夹target包含名为 .war 的 WAR 文件tryagain-1.0-SNAPSHOT.war

在名为的文件夹中找到的 .war 文件的屏幕截图

于 2017-05-25T14:18:17.430 回答
1

Maven War Plugin使用文档的详细信息指出:

调用

mvn package

或者

mvn compile war:war

应生成 WAR 文件target/vaadin-app-1.0-SNAPSHOT.war


另外链接vaadin-docs也说明执行后mvn package

The location of the resulting WAR package should be displayed in the command output.
于 2017-08-21T15:59:07.777 回答