一直很喜歡腳本語言,可是一直在不大的公司工做,用得一直是「高大上」的JAVA語言,在真正的項目中,沒什麼機會用到腳本語言。這兩年,又斷斷續續的用了2年的Ruby,再回頭繼續用JAVA,說實話,真感受JAVA語法的囉嗦——哪怕像C#那樣多些語法糖也好。html
雖然在JVM上也有像JRuby,scala那樣的動態語言,不知道怎麼的,就是不想去用,直到最近心血來潮看了一下Groovy,忽然被吸引住了,緣由,一開始估計是被他的全兼容JAVA語法所吸引,再慢慢稍微瞭解一下,也被他相似Ruby的語法,動態特性,與JAVA的互相調用,Spring支持等吸引,終於決定好好的看一下Groovy,同時要是有機會,也在公司的小項目中嘗試一下。java
在寫這篇文章的時候,我也只是個看了幾頁文檔的Groovy新手,因此接下來的文章,你們當個學習筆記看就好。git
所謂「工欲善其事,必先利其器」,一個好的開發環境,對於咱們寫代碼,但是大大有益。個人開發環境是Eclipse 4.5(Mars),配合Groovy Eclipse插件,Groovy爲2.4.3。下面先講一下插件的安裝。github
在Groovy的官方網站中,文檔頁中有專門講到開發工具的,其中一項就是講解對各IDE的支持web
Groovy官方文檔apache
IDE支持說明api
我用的就是Groovy Eclipse Plugin,點擊打開項目主頁: Groovy Eclipse網絡
在主頁上給出了安裝方式的WIKI,能夠根據本身的版本,來安裝須要的插件。須要說明一下的是,因爲有些運營商(好比電信)限制了出口帶寬,因此有些同窗安裝該插件的速度(<5K),會讓人無比的蛋疼及抓狂,而且頗有可能在你等待了半小時後,告訴你安裝失敗了(暫時來講,移動網絡訪問速度快得多,早晨訪問速度比其餘時間快得多)。一句話,你要是有耐心把插件安裝成功了,那麼相信學習Groovy已經徹底不成問題了。app
學習新語言天然要寫代碼,個人目的是用上Groovy的特性,寫一個簡單的Blog,因此免得之後再創建新的工程,索性一開始就創建一個WEB項目了,初始語言學習階段,就在某個package中創建一個類,慢慢試就成了。項目創建基於Maven,建於Maven還不瞭解的同窗,能夠自學一下。至於爲何學習Groovy了,還不用Gradle,很簡單,暫時不會,之後再學,並且Maven有OSCHINA的源,速度比較快。eclipse
建立項目,選擇Maven Project,進去後鉤上「Create a simple project」選項,創建一個簡單Maven工程,Group Id和Artifact Id根據本身狀況隨意,Packaging選擇war,用以生成網站結構。
創建完成後,項目必然會出錯,由於一個WEB項目,沒有web.xml文件,這個比較好解決,在webapp目錄下,新建WEB-INF文件夾,再在WEB-INF下新建web.xml便可,至於web.xml的內容,隨便去哪一個WEB工程複製一下吧。
在源文件夾下,新建一個包名,而後右鍵點擊包,」New」-> 「Other」,在彈出窗口中輸入「Groovy」,排除掉其餘項目,選擇Groovy Class,便可創建一個Groovy類,若是是第一次在這個項目中創建Groovy類,會在上訪提示沒有Groovy支持,會在創建好類後,自動加入Groovy的DSL支持。
固然,創建好類後,Eclipse又報錯了,其實這是理所固然的,由於沒有Groovy包的支持(我碰到過,在建立類的時候,Eclipse會自動引入Groovy包,若是你的環境自動幫你作這一步了,那就不用接下來的操做了)。
打開pom.xml,加入groovy-all包,由於這是一個網站,隨便把JAVA-EE也加上了,個人pom.xml看起來是這樣的。
<project xmlns="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>4.0.0</modelVersion> <groupId>com.fly84</groupId> <artifactId>self-rock</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>SelfRock</name> <description>SelfRock</description> <dependencies> <!-- groovy支持 --> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.3</version> </dependency> <!-- JavaEE支持 --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> </dependencies> </project>
保存後,Maven自動下載包,討厭的紅叉叉就不見了:)
在剛纔創建的類中,新建一個main函數,和JAVA的不同,這個可清爽多了
static main(args) { println 'Groovy,我來了' }
右鍵,Run As,選擇Groovy Script,怎麼樣,結果出來了吧。
接下來試試引用JAVA文件,仍是在這個包下面,創建一個Java類,就叫Food吧,內容以下:
public class Food { public void eat(){ System.out.println("好吃"); } }
而後改寫一下剛纔的Groovy類
static main(args) { def food = new Food() food.eat() }
結果成功的在Groovy中引用了Java類,相像一下,是否是之後在項目中,喜歡寫JAVA就寫JAVA,喜歡寫GROOVY就寫GROOVY呢?
一樣的,創建一個Groovy類後,在JAVA中調用也是徹底的沒有問題。
一開始我就說了,學習的目標,是用Groovy編寫一個簡單的Blog,因此這是一個WEB程序,可是如今尚未任何WEB方面的功能。在Groovy中,增長了gsp和groovy servlet,其實也就是jsp和servlet的改進版,就順便加到項目中吧。
打開web.xml,加上以下配置,增長對gsp和groovy servlet的支持
<servlet> <servlet-name>GroovyServlet</servlet-name> <servlet-class>groovy.servlet.GroovyServlet</servlet-class> </servlet> <servlet> <servlet-name>GroovyTemplate</servlet-name> <servlet-class>groovy.servlet.TemplateServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>GroovyServlet</servlet-name> <url-pattern>*.groovy</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>GroovyTemplate</servlet-name> <url-pattern>*.gsp</url-pattern> </servlet-mapping>
在web.app下創建一個index.gsp試試,裏面隨便寫點啥,好比
<html> <head> <title>groovy</title> </head> <body> <% for (c in 'GROOVY'){ %> <h1> <%=c%> </h1> <% } %> </body> </html>
有可能會碰到找不到groovy.servlet.TemplateServlet的異常,這是由於項目沒有把Maven引用的包複製到WEB-INF/lib文件夾下面,解決方式,能夠在項目上右鍵,選擇項目屬性,選擇Deployment Assembly,點擊Add按鈕,選擇Java Build Path Entries,而後選擇Maven Dependencies,會自動把Maven引用的包複製到WEB-INF/lib目錄下