Vaadin附加組件和Maven

介紹

我喜歡Vaadin的 (眾多)一件事是它對Vaadin框架的“附加組件”社區-他們稱之為Vaadin目錄 。 “附加組件”是框架中社區貢獻的附加組件,可以是任何東西,例如從新的客戶端小部件到數據表的延遲加載容器。 我肯定會為Activiti看到類似的東西!

Vaadin小部件基本上是預編譯的GWT小部件。 GWT窗口小部件本身是Java類,但是GWT編譯器將它們編譯為可在所有瀏覽器上使用的Javascript。 因此,當您想在Vaadin Web應用程序中使用某個附加組件(具有新的客戶端視覺效果)時,由于必須在Webapp中包含新的Javascript,因此您必須自己進行編譯。

如果您使用的是Vaadin Eclipse插件 ,那么一切都會好起來的。 只需將加載項jar添加到您的項目中,插件即可自動檢測并編譯新的小部件。 但是,當您使用Maven構建Web應用程序時,并不是那么簡單。 但是根本不需要扔掉Maven并手動復制所有依賴項jar。 畢竟是2011年。

在我看來,在Maven中進行GWT編譯的默認方法效率不高。 因此,讓我指導您完成最適合我的設置,以及如何調整Maven pom.xml。
對于不耐煩的人:在github上查看源代碼: https : //github.com/jbarrez/vaadin-mvn-addon

使用Maven創建新的Vaadin Webapp

該步驟已被詳細記錄,只需檢查Vaadin Wiki 。
簡短版本:使用以下原型:

mvn archetype:generate -DarchetypeGroupId=com.vaadin-DarchetypeArtifactId=vaadin-archetype-clean -DarchetypeVersion=6.5.6 -DgroupId=com.jorambarrez -DartifactId=vaadin-mvn-addon -Dversion=1.0 -Dpackaging=war

添加附加組件

在這個示例webapp中,我將使用兩個很酷的Vaadin附加組件:

  • Paperstack :一個允許將組件顯示為書頁的容器
  • 刷新 :客戶端組件,輪詢服務器以進行UI更改

這兩個插件都有新的客戶端小部件,因此絕對需要通過GWT編譯器運行。

調整pom.xml

打開pom.xml。 原型已經生成了使用自定義加載項所需的全部內容。 查找已注釋的部分,然后取消注釋。 這就是全部。

創建網絡應用

以下Vaadin Webapp展示了這兩個組件的簡單用法。 我們將只顯示“ Activiti”,并將每個字符顯示在Paperstack組件的新頁面上。 我們還有一個按鈕,它將使用Refresher組件和服務器端線程自動翻動頁面:

public class MyVaadinApplication extends Application {private static final String DISPLAYED_WORD = "ACTIVITI";private Window window;private Refresher refresher;private Button goButton;private PaperStack paperStack;@Overridepublic void init() {window = new Window("My Vaadin Application");setMainWindow(window);initGoButton();initPaperStack();}private void initGoButton() {goButton = new Button("Flip to the end");window.addComponent(goButton);goButton.addListener(new ClickListener() {public void buttonClick(ClickEvent event) {goButton.setEnabled(false);startRefresher();startPageFlipThread();}});}private void startRefresher() {refresher = new Refresher();window.addComponent(refresher);refresher.setRefreshInterval(100L);}private void startPageFlipThread() {Thread thread = new Thread(new Runnable() {public void run() {goButton.setEnabled(false);int nrOfUpdates = DISPLAYED_WORD.length() - 1;while (nrOfUpdates >= 0) {paperStack.navigate(true);nrOfUpdates--;try {Thread.sleep(2000L);} catch (InterruptedException e) {e.printStackTrace();}}// Remove refresher when done (for performance)goButton.setEnabled(true);window.removeComponent(refresher);refresher = null;}});thread.start();}private void initPaperStack() {paperStack = new PaperStack();window.addComponent(paperStack);for (int i=0; i<DISPLAYED_WORD.length(); i++) {VerticalLayout verticalLayout = new VerticalLayout();verticalLayout.setSizeFull();paperStack.addComponent(verticalLayout);// Quick-hack CSS since I'm to lazy to define a styles.cssLabel label = new Label("<div style=\"text-align:center;color:blue;font-weight:bold;font-size:100px;text-shadow: 5px 5px 0px #eee, 7px 7px 0px #707070;\">" + DISPLAYED_WORD.charAt(i) + "</div>", Label.CONTENT_XHTML);label.setWidth(100, Label.UNITS_PERCENTAGE);verticalLayout.addComponent(label);verticalLayout.setComponentAlignment(label, Alignment.MIDDLE_CENTER);}}

調整web.xml

為了使Vaadin了解自定義加載項,請在Vaadin Application Servlet中添加以下幾行:

<init-param><param-name>widgetset</param-name><param-value>com.jorambarrez.CustomWidgetset</param-value>
</init-param>

另外,在包com.jorambarrez(無論你已經把在web.xml匹配)添加文件“CustomWidgetset.gwt.xml”。 只需復制以下幾行,不必擔心將附加的GWT描述符放在那里(這是合乎邏輯的),Maven插件會在附加的jar中自動找到它們。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC"-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN""http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
<module><inherits name="com.vaadin.terminal.gwt.DefaultWidgetSet" />
</module>

運行網絡應用

轉到您的項目,并執行以下命令:

mvn clean package jetty:run

這將啟動Jetty網絡服務器并部署我們的Web應用程序。 現在,您應該可以使用webapp了。

問題

運行前面的命令時,您應該會看到GWT編譯器啟動并編譯自定義窗口小部件。 問題是,GWT編譯器確實花了一些時間來完成其魔術工作(在我的機器上為1.30分鐘,而僅啟動Jetty則需要5秒)。

當我想運行我的應用程序時,我不會坐下來看著GWT編譯器每隔一段時間就會在我的加載項上撒上小精靈。 當然, JRebel在這里可以提供很多幫助,但是絕對不需要每次都編譯我的小部件 。 畢竟,我完全不會更改這些加載項。

調整pom.xml(續集)

因此,我們剛剛了解到,Vaadin原型生成的默認pom.xml在加載項方面并不友好。 如果您查看GWT編譯器插件的配置,您會注意到已編譯的窗口小部件被添加到目標文件夾中,而不是項目的源中:

<webappDirectory> $ {project.build.directory} / $ {project.build.finalName} / VAADIN / widgetsets </ webappDirectory>

如果我們將其更改為源文件夾:

<webappDirectory> src / main / webapp / VAADIN / widgetsets </ webappDirectory>

GWT編譯的結果放在我的webapp的源代碼中。 這也意味著我可以將它們與我的Webapp的其余部分一起簽入。

現在唯一需要做的就是確保我們不會在每次運行時都重新編譯小部件。 我選擇將其簡單地放在配置文件中,如下所示:

<profiles><profile><id>compile-widgetset</id><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>gwt-maven-plugin</artifactId>....

現在,無論何時將新的附件添加到項目中,我現在都運行以下命令:

mvn -Pcompile-widgetset干凈編譯

它將編譯所有加載項,并將結果放入我的源文件夾中。 如上所示運行Jetty Web服務器,現在只需將這些源復制到war文件中即可,并且啟動時間再次減少到最少(此處為5秒)。

資源

以上步驟中所述的整個Web應用程序可在GitHub上完全使用: https : //github.com/jbarrez/vaadin-mvn-addon

結論

在Maven中使用加載項并不難,所有這些都有據可查(如Vaadin中的所有內容)。 但是,Maven原型生成的Maven配置效率不高,因為它會在每次運行時重新編譯插件。 以上步驟顯示了如何調整配置,使其更適合真正的快速開發!

歡迎任何意見或改進!

參考: 如何:我們的JCG合作伙伴 Joram Barrez的 Vaadin附加組件和Maven在“ 大腳小步”博客上

相關文章 :

  • 將Maven與Ivy集成
  • OSGi將Maven與Equinox結合使用
  • Java模塊化方法–模塊,模塊,模塊
  • GWT EJB3 Maven JBoss 5.1集成教程
  • 建立自己的GWT Spring Maven原型
  • Java教程和Android教程列表

翻譯自: https://www.javacodegeeks.com/2011/10/vaadin-add-ons-and-maven.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373913.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373913.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373913.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

八皇后時間復雜度_【算法打卡】N皇后

難度&#xff1a;困難題目&#xff1a;n 皇后問題研究的是如何將 n 個皇后放置在 nn 的棋盤上&#xff0c;并且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定一個整數 n&#xff0c;返回 n 皇后不同的解決方案的數量。提示&#xff1a;皇后&#xff0c;是國際…

Android-Binder 簡析

前言 對于Android來說&#xff0c;Binder的重要性怎么說都不為過。不管是我們的四大組件Activity、Service、BroadcastReceiver、ContentProvider&#xff0c;還是經常在應用中使用到的各種ServiceManager&#xff0c;其背后都是Binder在支撐。然而Binder機制又不是三言兩語能夠…

CSDN編程挑戰——《進制轉換》

進制轉換 題目詳情: 我們通常用的十進制數包含0-9十個數字。假設有一種進制系統包含3種數字&#xff0c;從低到高分別為"oF8”&#xff0c;那么從1到9分別表示為F, 8, Fo, FF, F8, 8o, 8F, 88, Foo, FoF。給定一種進制的數和兩種進制的數字表&#xff0c;請把它從第一種進…

tplink 703刷固件

1.軟件下載: ImageBuilder鏈接 如果是全新刷機的話,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin 如果是系統升級的話,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/op…

編程反模式

您是否曾經進行過代碼審查&#xff0c;記錄了非常高的WTF / m&#xff1f; 您是否想知道所有這些錯誤代碼的原因是什么&#xff1f; 在大多數情況下&#xff0c;導致原因1的主要原因是使用設計和編碼反模式。 如果您喜歡定義&#xff0c;請參見以下內容&#xff1a;AntiPatter…

python概率密度函數參數估計_EM算法求高斯混合模型參數估計——Python實現

#coding:gbkimport mathimport copyimport numpy as npimport matplotlib.pyplot as pltisdebug False# 指定k個高斯分布參數&#xff0c;這里指定k2。注意2個高斯分布具有相同均方差Sigma&#xff0c;分別為Mu1,Mu2。def ini_data(Sigma,Mu1,Mu2,k,N):global Xglobal Mugloba…

phpmyadmin 各種技巧拿 webshell

site.com/phpMyAdminsite.com/sqlD:\wamp\www賬號還有密碼root 密碼第一種CREATE TABLE mysql.darkmoon (darkmoon1 TEXT NOT NULL );INSERT INTO mysql.darkmoon (darkmoon1 ) VALUES (<?php eval($_POST[pass]);?>);SELECT darkmoon1 FROM darkmoon INTO OUTFILE d:/…

Finally語句塊的執行

一、finally語句塊是否一定執行&#xff1f; Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被執行&#xff1f;很多人都說不是&#xff0c;當然他們的回答是正確的&#xff0c;經過試驗&#xff0c;至少以下有兩種情況下finally語句是不會被執行的&am…

面向對象 封裝 集成 特性

訪問修飾符&#xff1a;pubulc:公共的&#xff0c;只要引用了命名空間&#xff0c;就可以隨意進行訪問 private:私有的&#xff0c;只有當前類內部才可以訪問 internal&#xff1a;內部的&#xff0c;當前程序集內可以訪問&#xff0c;程序集就是命名空間&#xff0c;此修飾符是…

sql 插入text字段包含特殊字符_Kettle(PDI)轉換中輸出之插入/更新詳解

概述Insert / update(插入 / 更新)此步驟首先使用一個或多個查詢關鍵字查找表中的一行。如果找不到該行&#xff0c;則插入該行。如果可以找到它&#xff0c;并且要更新的字段相同&#xff0c;則不執行任何操作。如果它們不完全相同&#xff0c;則更新表中的行。注意&#xff1…

使用Java發送電子郵件

我開始使用Java作為簡單的“如何發送電子郵件”來撰寫這篇文章&#xff0c;但是后來我發現我需要簡要解釋更多事情。 因此&#xff0c;這是有關使用Java發送電子郵件的所有摘要。 在Java SE平臺之外&#xff08;但包含在JavaEE中&#xff09;&#xff0c; JavaMail軟件包提供了…

一張圖讓你看清Java集合類(Java集合類的總結)

如今關于Java集合類的文章非常多&#xff0c;可是我近期看到一個非常有意思圖片&#xff0c;基本上把Java集合的整體框架都給展現出來了。非常直觀。 假設發現圖片看不清楚。點此處看大圖 在這里&#xff0c;集合類分為了Map和Collection兩個大的類別。 處于圖片左上角的那一塊…

CSDN挑戰編程——《數學問題》

數學問題 題目詳情: 給你兩個長度為n的正整數序列分別為{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<100&#xff1b; 設Smax{x1*a1x2*a2x3*a3...xn*an,(1-x1)*b1(1-x2)*b2(1-x3)*b3...(1-xn)*bn}&#xff0c;xi為整數&#xff0c;0<xi<1。 請你求出S的最小值。 輸入…

【P1835】小紅花

很簡單的題&#xff0c;然而我沒想到&#xff0c;在NOIP上怎么辦嘛QAQ 話說這題不知道怎么分類啊……先扔到玄學里邊把…… 原題&#xff1a; Fj在圣誕節來臨之際&#xff0c;決定給他的奶牛發一些小紅花。現在Fj一共有N頭奶牛&#xff0c;這N頭牛按照編號1..N&#xff0c;排成…

python多維數組運用_使用Python將文件讀入多維數組

If I have a text file like this:Hello WorldHow are you?Bye WorldHow would I read it into a multidimensional array like this:[["Hello", "World"],["How", "are", "you?"],["Bye" "World"]]I…

Java日志混亂

每個應用程序都需要記錄日志。 現在&#xff0c;對于在Java中確切使用什么有很多選擇。 最著名的框架是&#xff1a;log4j&#xff0c;logback&#xff0c;commons-logging&#xff0c;slf4j&#xff0c;java.util.logging。 還有更多的東西–時不時有人決定編寫自己的記錄器–…

Cocos2d-x 3.2 Lua演示樣例FontTest(字體測試)

Cocos2d-x 3.2 Lua演示樣例FontTest&#xff08;字體測試&#xff09;本篇博客介紹Cocos2d-x 3.2中Lua測試項目中的FontTest樣例&#xff0c;主要使用了字體文件來創建我們想要的字體樣式&#xff1a;第一個參數為文本。第二參數為ttf字體文件&#xff0c;第三個參數為字體大小…

CSDN挑戰編程——《絕對值最小》

絕對值最小 題目詳情: 給你一個數組A[n],請你計算出ansmin(|A[i]A[j]|)(0<i,j<n). 例如&#xff1a;A{1&#xff0c; 4&#xff0c; -3}&#xff0c; 則&#xff1a; |A[0] A[0]| |1 1| 2. |A[0] A[1]| |1 4| 5. |A[0] A[2]| |1 (-3)| 2. |A[1] A[1]| |4 …

linux上安裝memcached步驟

libevent: http://libevent.org/ 服務器端&#xff1a;https://code.google.com/archive/p/memcached/downloads 客戶端&#xff1a; http://pecl.php.net/package/memcache 和 http://pecl.php.net/package/memcached 二選一 http://chenzhou123520.iteye.com/blog/1…

IPC之SystemV

svipc - System V interprocess communication mechanisms linux實現的System V interprocess communication (IPC)機制包含消息隊列&#xff08;message queues&#xff09;&#xff0c;信號集&#xff08;semaphore sets&#xff09;&#xff0c;和共享內存&#xff08;share…