主頁 > 企業開發 > 使用JDK16.0.2、JavaEE8.0.1、TomCat9.0.52、Vaadin14.6.8,無法讓helloworld型別的程式作業。

使用JDK16.0.2、JavaEE8.0.1、TomCat9.0.52、Vaadin14.6.8,無法讓helloworld型別的程式作業。

2021-10-17 03:06:44 企業開發

我通過下載這個專案開始。https://github.com/vaadin/skeleton-starter-flow-cdi/archive/v14.zip

編輯一下pom.xml,洗掉tomEE插件資訊,因為我想單獨運行它。我還添加了一個maven-war插件資訊依賴,以便我可以用Java16編譯。并將默認構建引數改為maven clean package,而不是運行tomee插件。我的pom.xml最后看起來是這樣的:

<? xml version="1.0" encoding="UTF-8"? ><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、ServletsIDEs是復雜、煩瑣、令人沮喪和討厭的。更糟糕的是,所有這些都在不斷變化!我只能說要堅持下去。我所能說的就是要堅持,要固執,并繼續努力。并反復搜索 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專案的通常位置。

第一次運行

在你的IDE中打開下載的檔案夾。在Maven進行解包、下載等作業時,請稍等片刻。同時,請閱讀README.md頁。

Maven安靜下來后,按原樣構建專案。你的IDE可能有辦法在其GUI中呼叫Maven。例如,IntelliJ有一個Maven工具窗格。我們應該在那里運行clean,然后install

如果您遇到 "沒有找到有效的Maven安裝 "的錯誤,請參閱這個問題,以及這個答案,指示您將 "Maven包裝器 "設定改為 "捆綁式Maven"。是的,這是所有這些工具中眾多愚蠢的加速器之一。

如果您遇到 "無法訪問屬性的默認欄位 "的錯誤,請參閱這個問題這個答案,從而找到這個Maven檔案頁面,告訴您應在POM中添加什么。是的,這又是一個工具化程序中眾多愚蠢的減速帶。讓Maven重新處理POM-- 在IntelliJ中,這意味著點擊帶有Maven標志的小浮動小風球。

當你的clean & install運行成功后,你就可以運行Web應用了。在IntelliJ中,我進入Maven工具面板,然后導航到Project base for Vaadin > Plugins > jetty > jetty:run。等待幾分鐘,特別是第一次,因為可能需要下載更多的專案,而且Vaadin使用的各種工具必須運行。

最終,你將在控制臺中看到一條資訊,說明 "啟動 Jetty 服務器"。這意味著你可以切換到你的網路瀏覽器,并指向http://localhost:8080/。在那里你應該看到樣本應用程式,提示你的名字,并有一個 "說你好 "的按鈕。試試這個欄位和按鈕,以確保它全部作業。

現在回到 IDE。停止 Jetty Web 容器。在 IntelliJ 中,我點擊整個視窗右上角的紅色方形圖示。

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

標籤:

上一篇:如何避免在一個tkinter應用程式中出現許多執行緒

下一篇:vscode設定Tomcat9運行時

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more