我通過下載這個專案開始。https://github.com/vaadin/skeleton-starter-flow-cdi/archive/v14.zip
編輯一下pom.xml,洗掉tomEE插件資訊,因為我想單獨運行它。我還添加了一個maven-war插件資訊依賴,以便我可以用Java16編譯。并將默認構建引數改為maven clean package,而不是運行tomee插件。我的pom.xml最后看起來是這樣的:
<projectxmlns="http://maven.apache.org/POM/4. 0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>/span>4.0.0</modelVersion>/span>
<groupId>com.example.test</groupId>
<artifactId>jee8tc9j16v14-6-8_hello001</artifactId>
<name>JEE8TC9J16V14.6.8_hello001</name>/span>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>/span>
<properties>/span>
<maven.compiler.source>16</maven.compiler.source>/span>
<maven.compiler.target>/span>16</maven.compiler.target>/span>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>/span>UTF-8</project.reporting.outputEncoding>/span>
<failOnMissingWebXml>false</failOnMissingWebXml>
<!--依賴性-->
<vaadin.version>/span>14.6.8</vaadin.version>
<drivers.dir>${project.baseir}/drivers</drivers.dir>/span>
<drivers.downloader.phase>預集成測驗</drivers.downloader.phase>/span>
</properties>
<pluginRepositories>/span>
<pluginRepository>/span>
<id>/span>central</id>/span>
<url>https://repo1.maven.org/maven2/</url>
<snapshots>/span>
<enabled>/span>false</enabled>
</snapshots>/span>
</pluginRepository>/span>
</pluginRepositories>/span>
<repositories>/span>
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2/</url>
<snapshots>/span>
<enabled>/span>false</enabled>
</snapshots>/span>
</repository>/span>
<!--許多Vaadin附加組件使用的存盤庫 -->
<repository>/span>
<id>Vaadin Directory</id>
<url>https://maven.vaadin.com/vaadin-addons</url>
<snapshots>/span>
<enabled>/span>false</enabled>
</snapshots>/span>
</repository>/span>
</repositories>/span>
<dependencyManagement>/span>
<dependencies>/span>
<dependency>>
<groupId>/span>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<version>${vaadin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>/span>
</dependencies>
</dependencyManagement>/span>
<dependencies>/span>
<dependency>>
<groupId>/span>com.vaadin</groupId>
<!--用vaadin-core替換artifactId,以便只使用免費組件-->
<artifactId>vaadin</artifactId>
<exclusions>/span>
<!--只有在Vaadin 13兼容模式下運行時才需要Webjars -->
<exclusion>/span>
<groupId>/span>com.vaadin.webjar</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>org.webjars.bowergithub.insites</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>org.webjars.bowergithub.polymer</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>org.webjars.bowergithub.polymerelements</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>org.webjars.bowergithub.vaadin</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>org.webjars.bowergithub.webcomponents</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
</exclusions>/span>
</dependency>
<dependency>>
<groupId>/span>com.vaadin</groupId>
<artifactId>/span>vaadin-cdi</artifactId>/span>
</dependency>/span>
<dependency>>
<groupId>/span>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>/span>8.0.1</version>/span>
<scope>provided</scope>
</dependency>/span>
<!--增加了提供日志輸出,因為Flow使用-->
<!--未系結的SLF4J無操作(NOP)記錄器實作-->
<dependency>
<groupId>/span>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</dependency>/span>
<dependency>>
<groupId>/span>com.vaadin</groupId>
<artifactId>vaadin-testbench</artifactId>
<scope>test</scope>
</dependency>/span>
</dependencies>
<build>/span>
<defaultGoal>清理包</defaultGoal>
<plugins>/span>
<!--
注意同步java的依賴性和進口,在
package.json和main.js檔案中的java依賴和匯入。
它還會創建webpack.config.js,如果還不存在的話。
-->
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>${vaadin.version}</version>
<executions>/span>
<execution>>
<目標>/span>
<goal>prepare-frontend</goal>
</goals>/span>
</執行>/span>
</executions>/span>
</plugin>/span>
<plugin>/span>
<artifactId>maven-war-plugin</artifactId>
<version>/span>3.3.1</version>/span>
</plugin>/span>
</plugins>/span>
</build>/span>
<profiles>
<profile>/span>
<!--使用-Pproduction激活生產模式-->
<id>/span>production</id>/span>
<properties>/span>
<vaadin.productionMode>true</vaadin.productionMode>
</properties>
<dependencies>>
<dependency>>
<groupId>/span>com.vaadin</groupId>
<artifactId>flow-server-production-mode</artifactId>
</dependency>/span>
</dependencies>
<build>/span>
<plugins>/span>
<plugin>/span>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<executions>/span>
<execution>>
<目標>/span>
<goal>build-frontend</goal>
</goals>/span>
</執行>/span>
</executions>/span>
</plugin>/span>
</plugins>/span>
</build>/span>
</profile>/span>
<profile>/span>
<id> it</id>
<build>/span>
<plugins>/span>
<!--在服務器啟動后運行集成測驗(*IT)-->
<plugin>
<groupId>/span>org.apache.maven.plugins</groupId>
<artifactId>maven-failafe-plugin</artifactId>
<version>/span>2.22.2</version>
<執行>/span>
<execution>>
<目標>/span>
<goal>integration-test</goal>
<goal>verify</goal>
</目標>/span>
</執行>/span>
</executions>/span>
<configuration>>
<trimStackTrace>/span>false</trimStackTrace>/span>
<enableAssertions>true</enableAssertions>
<systemPropertyVariables>/span>
<!--將下載的webdrivers的位置傳遞給測驗-->。
<webdriver.chrome.driver>${webdriver.chrome.driver}</webdriver.chrome.driver>
</systemPropertyVariables>/span>
</configuration>/span>
</plugin>/span>
<plugin>/span>
<groupId>com.lazerycode.selenium</groupId>
<artifactId>driver-binary-downloader-maven-plugin</artifactId>
<version>/span>1.0.17</version>/span>
<configuration>/span>
<onlyGetDriversForHostOperatingSystem>/span>true
</onlyGetDriversForHostOperatingSystem> true
<rootStandaloneServerDirectory>
${project.basedir}/drivers/driver
</rootStandaloneServerDirectory> ${project.basedir}/drivers/driver
<downloadedZipFileDirectory>
${project.basedir}/drivers/driver_zips
</downloadedZipFileDirectory>
<customRepositoryMap>/span>
${project.baseir}/drivers.xml
</customRepositoryMap> ${project.baseir}/drivers.xml
</configuration>/span>
<執行>/span>
<execution>>
<!--使用階段 "none "跳過下載步驟 -->
<phase>${drivers.downloader.phase}</phase>/span>
<goals>/span>
<goal>selenium</goal>
</目標>/span>
</執行>/span>
</executions>/span>
</plugin>/span>
</plugins>/span>
</build>/span>
</profile>/span>
</profiles>/span>
</project>/span>
我保持其他一切不變,然后通過tomcat GUI(http://localhost:8080/manager/html)部署構建的.war檔案。
訪問http://localhost:8080/jee8tc9j16v14-6-8_hello001-1.0-SNAPSHOT/,得到的結果是:
HTTP Status 500 - Internal Server Error
型別 例外報告
訊息 在實體化Servlet類時出錯 [com.vaadin.cdi.CdiVaadinServlet]。
描述 服務器遇到了一個意外情況,使其無法完成該請求。
例外情況
javax.servlet.ServletException: 在實體化servlet類[com.vaadin.cdi.CdiVaadinServlet]時出錯。
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
org.apache.catalina.values.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valls.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:831)
根本原因
java.lang.NoClassDefFoundError: javax/enterprise/inject/spi/BeanManager
java.base/java.lang.Class.getDeclaredFields0(Native Method)
java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3229)
java.base/java.lang.Class.getDeclaredFields(Class.java:2335)
org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:104)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
org.apache.catalina.values.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valls.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:831)
根本原因
java.lang.ClassNotFoundException: javax.enterprise.inject.spi.BeanManager
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215)
java.base/java.lang.Class.getDeclaredFields0(Native Method)
java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3229)
java.base/java.lang.Class.getDeclaredFields(Class.java:2335)
org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:104)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
org.apache.catalina.values.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valls.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:831)
注意 在服務器日志中可以看到根本原因的完整堆疊跟蹤。
Apache Tomcat/9.0.52。
也許有人知道什么可能導致這些問題?也許我的部署是錯誤的?也許TomCat9不能與這個依賴關系一起使用?
<dependency>
<groupId>/span>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>/span>8.0.1</version>/span>
<scope>provided</scope>
</dependency>/span>
如果這個問題看起來很微不足道,請原諒。我對這一切都很陌生,而且也很糾結,所以任何幫助都是非常值得贊賞的! :)
uj5u.com熱心網友回復:
Tomcat只實作了Java EE的一個小子集
。Apache Tomcat和Eclipse Jetty是對Servlet、JavaServer Pages以及Java EE中定義的其他極少數規范的兩種競爭性實作。但是Java EE還定義了幾十個規格,這些產品都沒有實作。這兩種產品都相當受歡迎,因為它們提供了足夠多的 Java EE,以滿足許多人的需求。
因此您無法在您的 POM 中指定完整的 Java EE API。Tomcat 缺乏對該 API 的大部分實作。
有關詳細資訊,請參閱我對問題的回答,Java EE Web Profile vs Java EE Full Platform。請特別留意我的章節,面向服務(Tomcat & Jetty)。
您確實可以僅使用 Tomcat 或 Jetty 來構建 Vaadin Web 應用程式。我自己已經交付了這樣的應用程式,在部署到 Apache Tomcat 時運行得非常好。Vaadin的一些默認POM包括一個Maven動作,可以在你的IDE中運行Jetty。我們在下面的步驟部分使用了這一方法。
查看你第一句話中的URL,我發現你是通過下載CDI的骨架啟動器開始你的專案。"CDI "是指背景關系和依賴注入,這是 Tomcat 未實作的眾多 Java EE 規范之一。因此,POM 被設定為完整的 Java EE API。
?你可以下載一個沒有 CDI 的不同骨架啟動器,也沒有完整的 Java EE API。
你說:
我是第一次接觸這些東西,而且非常糾結,所以非常感謝任何幫助!
我是第一次接觸這些東西。:)
是的,網路應用、網路容器、Maven/Gradle、Vaadin、Java、Servlets和IDEs是復雜、煩瑣、令人沮喪和討厭的。更糟糕的是,所有這些都在不斷變化!我只能說要堅持下去。我所能說的就是要堅持,要固執,并繼續努力。并反復搜索 Stack Overflow - 這里已經涵蓋了許多問題和方面,其中一些是由我用自己的試驗和磨難來完成的。
步驟
。這里是一個步驟大綱,但并不是一個真正的完整教程。
請務必在 Vaadin.com 網站以及 YouTube 上查看教程。特別是,Marcus Hellberg 最近一直在發布好的教程。另外,如果你真的被卡住了,Vaadin Ltd公司也出售咨詢和培訓服務。
下載skeleton-starter-flow-14
。在Vaadin.com的啟動頁上,單擊鏈接,進一步向下下載一個普通的Java啟動程式。在下一頁,尋找那個Vaadin 14 - plain Java塊。請注意,我們不需要Vaadin 14 - Spring Boot塊,也不需要Vaadin 14 - CDI塊。
該塊中的鏈接下載了skeleton-starter-flow-14檔案夾。你可以更改名稱,并將該檔案夾重新定位到你的IDE專案的通常位置。
Maven安靜下來后,按原樣構建專案。你的IDE可能有辦法在其GUI中呼叫Maven。例如,IntelliJ有一個Maven工具窗格。我們應該在那里運行 如果您遇到 "沒有找到有效的Maven安裝 "的錯誤,請參閱這個問題,以及這個答案,指示您將 "Maven包裝器 "設定改為 "捆綁式Maven"。是的,這是所有這些工具中眾多愚蠢的加速器之一。 如果您遇到 "無法訪問屬性的默認欄位 "的錯誤,請參閱這個問題與這個答案,從而找到這個Maven檔案頁面,告訴您應在POM中添加什么。是的,這又是一個工具化程序中眾多愚蠢的減速帶。讓Maven重新處理POM-- 在IntelliJ中,這意味著點擊帶有Maven標志的小浮動小風球。
當你的 最終,你將在控制臺中看到一條資訊,說明 "啟動 Jetty 服務器"。這意味著你可以切換到你的網路瀏覽器,并指向 現在回到 IDE。停止 Jetty Web 容器。在 IntelliJ 中,我點擊整個視窗右上角的紅色方形圖示。
第一次運行
在你的IDE中打開下載的檔案夾。在Maven進行解包、下載等作業時,請稍等片刻。同時,請閱讀README.md頁。
clean,然后install。
clean & install運行成功后,你就可以運行Web應用了。在IntelliJ中,我進入Maven工具面板,然后導航到Project base for Vaadin > Plugins > jetty > jetty:run。等待幾分鐘,特別是第一次,因為可能需要下載更多的專案,而且Vaadin使用的各種工具必須運行。
http://localhost:8080/。在那里你應該看到樣本應用程式,提示你的名字,并有一個 "說你好 "的按鈕。試試這個欄位和按鈕,以確保它全部作業。
Java 16
你想使用Java 16,所以我們需要再次回到我們的POM。替換這兩行:
<maven. compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
...用:
<maven. compiler.source>16</maven.compiler.source>
<maven.compiler.target>/span>16</maven.compiler.target>/span>
或者用這個 "發布 "標簽,可以在以后的Maven工具版本中使用:
<maven. compiler.release>16</maven.compiler.release>
保存POM檔案。讓Maven重新加載這個編輯過的POM。在IntelliJ中,這意味著點擊帶有Maven標志的小浮動小風車。
再做一次Maven的clean & install,以確保安全。
你可以更新:
<jetty. 版本>9.4.43.v20210629</jetty.version>
...或者:
<jetty. 版本>10.0.6</jetty.version>
...以及以下專案。你的IDE可能能夠查詢到最新的版本號。在IntelliJ中,洗掉版本號,然后按Control Space(在macOS上,如果我沒有記錯的話)。
<! -- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
<dependency>/span>
<groupId>io.github.bonigarcia</groupId>/span>
<artifactId>webdrivermanager</artifactId>
<version>/span>4.4.3</version>/span>
<scope>test</scope>
</dependency>/span>
<plugin>
<groupId>/span>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>/span>3.8.1</version>/span>
</plugin>/span>
<groupId>org. apache.maven.plugins</groupId>org。
<artifactId>maven-failafe-plugin</artifactId>
<version>3.0.0-M5</version>
保存對你的POM的編輯。讓你的IDE重新處理該POM。再做一次Maven clean & install。也許可以要求IDE重建專案,以獲得好運氣。然后用jetty:run動作運行網路應用。將你的網路瀏覽器指向http://localhost:8080/。你的應用程式應該會再次運行。
示例POM這是我最終的POM。
<?xml version="1.0" encoding="UTF-8"? >
<project xmlns="http://maven.apache.org/POM/4.0.0"/span>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"。
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"/span>>
<modelVersion>/span>4.0.0</modelVersion>/span>
<groupId>com.example</groupId>
<artifactId>project-base</artifactId>
<name>Vaadin的專案基礎</name>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>/span>
<properties>/span>
<maven.compiler.source>16</maven.compiler.source>/span>
<maven.compiler.target>/span>16</maven.compiler.target>/span>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>/span>UTF-8</project.reporting.outputEncoding>/span>
<failOnMissingWebXml>false</failOnMissingWebXml>
<vaadin.version>/span>14.6.8</vaadin.version>/span>
<jetty.version>9.4.43.v20210629</jetty.version>
</properties>/span>
<repositories>/span>
<!--定義的順序很重要。在這里明確地定義中央,以確保它有最高的優先權。-->
<!-- 主Maven資源庫 -->
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
<snapshots>/span>
<enabled>/span>false</enabled>
</snapshots>/span>
</repository>/span>
<!--許多Vaadin附加組件使用的存盤庫 -->
<repository>/span>
<id>Vaadin Directory</id>
<url>https://maven.vaadin.com/vaadin-addons</url>
<snapshots>/span>
<enabled>/span>false</enabled>
</snapshots>/span>
</repository>/span>
</repositories>/span>
<pluginRepositories>/span>
<!--Maven Central 倉庫需要https://,才能訪問 -->
<pluginRepository>/span>
<id>/span>central</id>/span>
<url>https://repo.maven.apache.org/maven2</url>/span>
<snapshots>/span>
<enabled>/span>false</enabled>
</snapshots>/span>
</pluginRepository>/span>
</pluginRepositories>/span>
<dependencyManagement>/span>
<dependencies>/span>
<dependency>>
<groupId>/span>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<type>/span>pom</type>/span>
<scope>import</scope>
<version>${vaadin.version}</version>
</dependency>/span>
</dependencies>
</dependencyManagement>/span>
<dependencies>/span>
<dependency>>
<groupId>/span>com.vaadin</groupId>
<!--用vaadin-core替換artifactId,以便只使用免費組件-->
<artifactId>vaadin</artifactId>
<exclusions>/span>
<!--只有在Vaadin 13兼容模式下運行時才需要Webjars -->
<exclusion>/span>
<groupId>/span>com.vaadin.webjar</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>org.webjars.bowergithub.insites</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>org.webjars.bowergithub.polymer</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>org.webjars.bowergithub.polymerelements</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>org.webjars.bowergithub.vaadin</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
<exclusion>/span>
<groupId>org.webjars.bowergithub.webcomponents</groupId>
<artifactId>*</artifactId>
</exclusion>/span>
</exclusions>/span>
</dependency>
<!--增加了提供日志輸出,因為Vaadin使用-->。
<!--未系結的SLF4J無操作(NOP)記錄器實作-->
<dependency>
<groupId>/span>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</dependency>/span>
<dependency>>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>/span>3.1.0</version>/span>
<scope>provided</scope>
</dependency>/span>
<dependency>>
<groupId>/span>com.vaadin</groupId>
<artifactId>vaadin-testbench</artifactId>
<scope>test</scope>
</dependency>/span>
<!--https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
<dependency>
<groupId>io.github.bonigarcia</groupId>/span>
<artifactId>webdrivermanager</artifactId>
<version>/span>4.4.3</version>/span>
<scope>test</scope>
</dependency>/span>
</dependencies>
<build>/span>
<! -- Basil added-->
<pluginManagement>/span>
<plugins>/span>
<plugin>/span>
<groupId>/span>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>/span>3.3.1</version>/span>
</plugin>/span>
</plugins>/span>
</pluginManagement>/span>
<defaultGoal>jetty:run</defaultGoal>
<plugins>/span>
<!-- Basil added-->
<plugin>/span>
<groupId>/span>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>/span>3.3.1</version>/span>
</plugin>/span>
<plugin>/span>
<groupId>/span>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>/span>3.8.1</version>/span>
</plugin>/span>
<!--Jetty插件,無需服務器即可輕松測驗-->/span>
<plugin>/span>
<groupId>/span>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>/span>
<!-- 如果使用IntelliJ IDEA的自動編譯,這
可能會導致在后臺進行大量不必要的編譯。
后臺。-->
<scanIntervalSeconds>2</scanIntervalSeconds>/span>
<!--使用war output目錄來獲取webpack檔案-->
<webAppConfig>/span>
<allowDuplicateFragmentNames>true</allowDuplicateFragmentNames>/span>
</webAppConfig>/span>
</configuration>/span>
</plugin>/span>
<!--
注意同步java的依賴性和進口,在
package.json和main.js檔案中的java依賴和匯入。
它還會創建webpack.config.js,如果還不存在的話。
-->
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>${vaadin.version}</version>
<executions>/span>
<execution>>
<目標>/span>
<goal>prepare-frontend</goal>
</goals>/span>
</執行>/span>
</executions>/span>
</plugin>/span>
</plugins>/span>
</build>/span>
<profiles>
<profile>/span>
<!--使用-Pproduction激活生產模式-->
<id>/span>production</id>/span>
<properties>/span>
<vaadin.productionMode>true</vaadin.productionMode>
</properties>
<dependencies>>
<dependency>>
<groupId>/span>com.vaadin</groupId>
<artifactId>flow-server-production-mode</artifactId>
</dependency>/span>
</dependencies>
<build>/span>
<plugins>/span>
<plugin>/span>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<executions>/span>
<execution>>
<目標>/span>
<goal>build-frontend</goal>
</goals>/span>
<階段>編譯</階段>
</execution>
</executions>/span>
</plugin>/span>
</plugins>/span>
</build>/span>
</profile>/span>
<profile>/span>
<id> it</id>
<build>/span>
<plugins>/span>
<plugin>/span>
<groupId>/span>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>/span>
<scanIntervalSeconds>0</scanIntervalSeconds>/span>
<stopPort>/span>8081</stopPort>/span>
<stopWait>5</stopWait>/span>
<stopKey>${project.artifactId}</stopKey>
</configuration>/span>
<執行>/span>
<execution>>
<id>/span>start-jetty</id>/span>
<phase>/span>pre-integration-test</phase>/span>
<目標>/span>
<目標>部署-戰爭</目標>
</goal>/span>
</執行>/span>
<execution>/span>
<id>/span>stop-jetty</id>/span>
<phase>/span>post-integration-test</phase>/span>
<目標>/span>
<goal>stop</goal>
</goals>/span>
</執行>/span>
</executions>/span>
</plugin>/span>
<!--在服務器啟動后運行集成測驗(*IT)-->/span>
<plugin>
<groupId>/span>org.apache.maven.plugins</groupId>
<artifactId>maven-failafe-plugin</artifactId>
<version>3.0.0-M5</version>
<執行>/span>
<execution>>
<目標>/span>
<goal>integration-test</goal>
<goal>verify</goal>
</目標>/span>
</執行>/span>
</executions>/span>
<configuration>>
<trimStackTrace>/span>false</trimStackTrace>/span>
<enableAssertions>true</enableAssertions>
</configuration>
</plugin>/span>
</plugins>/span>
</build>/span>
</profile>/span>
</profiles>/span>
</project>/span>
Tomcat
如果運行良好,再次停止Jetty服務器。現在,我們可以試試Tomcat 9.0.52.
。在你的專案的target檔案夾中查看。你應該找到WAR檔案,命名為project-base-1.0-SNAPSHOT.war之類。將該檔案復制到Tomcat的webapps檔案夾中。根據需要重命名,如demo.war。
啟動Tomcat。將您的瀏覽器指向http://localhost:8080/。你應該看到 "Apache Tomcat/9.0.52 "頁面。
將您的瀏覽器指向http://localhost:8080/demo/,其中demo與您在WAR檔案上的名字相匹配。你應該看到Vaadin應用程式的例子正在運行。Voilà!
希望這能幫助你在Vaadin作業中走得更遠。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319412.html
標籤:
