国产精品18久久久久久久久久久久,久久综合九色综合欧美98,欧美日韩abhttp://www.aygfsteel.com/jiangshachina/category/35488.htmlåŒæ˜¯Java爱好者,盔R€¢ä½•必曾相识åQ?lt;br>
a cup of Java, cheers!zh-cnThu, 23 Jan 2014 23:37:12 GMTThu, 23 Jan 2014 23:37:12 GMT60- 使用Gradleæž„å¾Java Web应用(è¯?http://www.aygfsteel.com/jiangshachina/archive/2014/01/23/409285.htmlSha JiangSha JiangThu, 23 Jan 2014 13:22:00 GMThttp://www.aygfsteel.com/jiangshachina/archive/2014/01/23/409285.htmlhttp://www.aygfsteel.com/jiangshachina/comments/409285.htmlhttp://www.aygfsteel.com/jiangshachina/archive/2014/01/23/409285.html#Feedback1http://www.aygfsteel.com/jiangshachina/comments/commentRss/409285.htmlhttp://www.aygfsteel.com/jiangshachina/services/trackbacks/409285.html
使用Gradleæž„å¾Java Web应用
本文是å‘布在java.net上的一½‹‡æ‘˜è‡ªäºŽ<Gradle in Action>一书ä¸çš?a >节é€?/a>åQŒä»‹¾l了使用Gradleæž„å¾Java Web应用的过½E‹ã€‚刚刚接触GradleåQŒçœ‹åˆîCº†˜q™ç¯‡ž®æ–‡åQŒéšæ‰‹è¯‘äº†å‡ºæ?-) (2014.01.23æœ€åŽæ›´æ–?
当今世界åQŒä¸€‹z„¡¹å¿™ã€‚在èŒä¸šç”Ÿæ„Óå’Œç§äººç”Ÿ‹zÖM¸åQŒæˆ‘们ä¸é—´çš„è®¸å¤šäºø™¦åŒæ—¶½Ž¡ç†å¤šä¸ª™å¹ç›®ã€‚ä½ å¯èƒ½å¸¸å¸¸å‘现自己处于ä¸çŸ¥æ‰€æŽªåŠå¤±æŽ§çš„状æ€ã€‚ä¿æŒè§„æ•´åÆˆä¸“æ³¨äºŽäh值的关键是一个维护良好的工作清å•。当ç„Óž¼Œä½ å¯èƒ½æ€ÀL˜¯æŠŠä½ çš„ä“QåŠ¡å†™åœ¨ä¸€å¼ çº¸ä¸Šï¼Œä½†æ˜¯ä½ ä¹Ÿè®æ€¸å¯èƒ½åœ¨ä½ 所处的ä»ÖM½•åœ°æ–¹éƒ½å¯æ–¹ä¾¿åœ°èŽ·å¾—è¿™äº›å·¥ä½œæ¡ç›®ï¼Ÿå¯¹äº’è”ç½‘çš„è®¿é—®å‡ ä¹Žæ˜¯æ— å¤„ä¸åœ¨çš„ï¼Œæ— è®ºæ˜¯é€šè¿‡ä½ çš„¿UÕdŠ¨ç”µè¯åQŒè¿˜æ˜¯å…¬å…Þqš„¾|‘络接入ç‚V€‚在<Gradle in Action>一书ä¸åQŒå¦‚å›?所½Cºçš„说明性示例是一个很有å¸å¼•力的å¯è§†åŒ–Web应用ã€?/span>
å›? To Do应用å¯ä»¥é€šè¿‡äº’蔾|‘进行访问,òq¶ä‹É用它åŽÈ®¡ç†æ•°æ®å˜å‚¨ä¸çš„工作æ¡ç›?/strong>
Gradleæ’äšg表现的如åŒä¸€ä¸ªä‹É能器åQŒå®ƒä¼šè‡ªåŠ¨åœ°æ‰§è¡Œ˜q™äº›ä»ÕdŠ¡ã€‚ä¸€ä¸ªæ’仉™€šè¿‡å¼•入特定领域的规范以åŠå¯¹¾~ºçœå€¼æ•感的ä»ÕdŠ¡åŽÕd¯¹å·¥ç¨‹˜q›è¡Œæ‰©å±•。éšGradleå‘布的æ’件之一ž®±æ˜¯Javaæ’äšg。该Javaæ’äšg¾lä¸ä»…仅是æä¾›äº†æºç ¾~–译和打包这æ ïLš„基础功能。它为工½E‹å¾ç«‹äº†ä¸€æ•´å¥—æ ‡å‡†çš„ç›®å½•å¸ƒå±€åQŒå®ƒä¼šç¡®ä¿ä»¥æ£ç¡®çš„顺åºåŽ»æ‰§è¡Œä»ÕdŠ¡åQŒè¿™æ øP¼Œ˜q™äº›ä»ÕdŠ¡åœ¨Javaå·¥ç¨‹çŽ¯å¢ƒä¸æ‰æ˜¯æœ‰æ„ä¹‰çš„ã€‚çŽ°åœ¨æ˜¯æ—¶å€™äØ“æˆ‘ä»¬çš„åº”ç”¨åŽ»åˆ›å¾ä¸€ä¸ªæž„廸™„šæœ¬åÆˆåŽÖM‹É用这个Javaæ’äšg了ã€?/span>
æž„å¾Java应用
一开始,æ¯ä¸ªGradle工程都会创å¾ä¸€ä¸ªå为build.gradleçš„æž„å»ø™„šæœ¬ã€‚äØ“äº†åˆ›å»ø™¯¥è„šæœ¬åQŒåƈ告诉该工½E‹ä‹É用Javaæ’äšgåQŒåº”该僘q™æ ·åŽÕdšåQ?/span>
apply plugin: 'java'
ä¸ÞZº†æž„å¾ä½ çš„Java代ç åQŒä¸€è¡Œä»£ç 就够了。但Gradle怎么知é“åŽÕd“ªå„¿æ‰¾ä½ çš„æºæ–‡ä»¶å‘¢åQŸè¯¥Javaæ’äšg引入的规范之一ž®±æ˜¯æºä»£ç 的路径。默认地åQŒè¯¥æ’äšg会到目录src/main/java䏿œå¯ÖMñ”å“çš„æºä»£ç ã€?/span>
æž„å¾Web应用
通过Waræ’äšgåQŒGradle也æä¾›äº†æž„å¾Web应用的扩展支æŒã€‚Waræ’äšg扩展了Javaæ’äšgåQŒå®ƒåŠ å…¥äº†é’ˆå¯¹Web应用½E‹åºå¼€å‘的规范åQŒåƈ支æŒå½’集WARæ–‡äšg。让我们也在˜q™ä¸ªå·¥ç¨‹ä¸ç”¨ç”¨Waræ’äšgåQ?/span>
apply plugin: 'war'
Webåº”ç”¨æºæ–‡ä»¶çš„默认路径是src/main/webapp。å‡è®¾ä½ å·²ç»æ˜Žç¡®äº†è¯¥åº”用所必è¦çš„Java¾c…R€‚那么è¦ä½¿äñ”å“的全部æºä»£ç å’ŒWebèµ„æºæ–‡äšg处于æ£ç¡®è·¯å¾„下,该工½E‹çš„目录布局应该åƒä¸‹é¢è¿™æ øP¼š
.
├── build.gradle
└── src
└── main
├── java
│ └── com
│ └── manning
│ └── gia
│ └── todo
│ ├── model
│ │ └── ToDoItem.java
│ ├── repository
│ │ ├── InMemoryToDoRepository.java
│ │ └── ToDoRepository.java
│ └── web
│ └── ToDoServlet.java
└── webapp #A
├── WEB-INF
│ └── web.xml #B
├── css #C
│ ├── base.css
│ └── bg.png
└── jsp #D
├── index.jsp
└── todo-list.jsp
#A Webæºæ–‡ä»‰™»˜è®¤ç›®å½?br />
#B Web应用æè¿°½W¦æ–‡ä»?br />
#C å˜å‚¨æè¿°å¦‚何展现HTMLå…ƒç´ çš„æ ·å¼å•æ–‡äšg的目å½?br />
#D å˜æ”¾JSPå½¢å¼çš„动æ€è„šæœ¬åŒ–è§†å›¾¾l„äšg
声明外部ä¾èµ–
在实现这个Web应用的过½E‹ï¼Œæˆ‘们使用的一些类åQŒä¾‹å¦‚javax.servlet.HttpServletåQŒåƈéžJavaæ ‡å‡†ç‰?Java SE)的一部分。在构å¾å·¥ç¨‹ä¹‹å‰åQŒæˆ‘们需è¦ç¡®ä¿å·²¾l声明了˜q™äº›å¤–部ä¾èµ–。在Java¾pÈ»Ÿä¸ï¼Œä¾èµ–¾cÕdº“是以JARæ–‡äšgçš„åÅžå¼åŽ»å‘布和ä‹É用的。许多类库å¯ä»¥ä»Žä»“库åQŒå¦‚一个文件系¾lŸæˆ–ä¸å¤®æœåŠ¡å™¨ï¼Œä¸èŽ·å¾—ã€‚äØ“äº†ä‹É用ä¾èµ–,Gradleè¦æ±‚ä½ è‡³ž®‘定义一个仓库。出于一些考虑åQŒæˆ‘们将使用公共的å¯é€šè¿‡äº’蔾|‘进行访问的Maven Central仓库ã€?/span>
repositories {
mavenCentral() #A
}
#A 通过http://repo1.maven.org/maven2讉K—®Maven2ä¸å¤®ä»“åº“çš„ç®€çŸæ ‡è®?/span>
在Gradleä¸ï¼Œä¾èµ–是通过é…ç½®™åÒŽ¥˜q›è¡Œåˆ†ç»„的。我们将æ¥Servletä¾èµ–使用的酾|®é¡¹æ˜¯providedCompile。该é…ç½®™å¹ç”¨äºŽé‚£äº›åœ¨¾~–译时而鞘q行时所需的ä¾èµ–。åƒJSTL˜q™æ ·çš„è¿è¡Œæ—¶ä¾èµ–åQŒåœ¨¾~–译时ä¸ä¼šè¢«ç”¨åˆ°åQŒä½†åœ¨è¿è¡Œæ—¶åˆ™ä¼šè¢«ç”¨åˆ°ã€‚它们都会æˆä¸ºWARæ–‡äšg的一部分。下é¢çš„é…ç½®è¯å¥å—声明了我们应用所需的外部类库:
dependencies {
providedCompile 'javax.servlet:servlet-api:2.5'
runtime 'javax.servlet:jstl:1.1.2'
}
æž„å¾å·¥ç¨‹
我们已ç»å‡†å¤‡å¥½æž„廸™¿™ä¸ªå·¥½E‹äº†ã€‚å¦åˆ°å·¥½E‹ä¸çš„一个Javaæ’äšgä»ÕdŠ¡å䨓build。该ä»ÕdŠ¡ž®†ç¼–译æºä»£ç åQŒè¿è¡Œæµ‹è¯•程åºåƈ归集WARæ–‡äšg--所有的˜q™äº›ä»ÕdŠ¡éƒ½å°†ä»¥æ£¼‹®çš„™åºåºè¢«æ‰§è¡Œã€‚执行命令gradle build之åŽåQŒä½ å¯èƒ½ä¼šå¾—到åŞ如下é¢çš„输出åQ?/span>
$ gradle build
:compileJava #A
:processResources UP-TO-DATE
:classes
:war #B
:assemble
:compileTestJava UP-TO-DATE #C
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test #D
:check
:build
#A ¾~–译产å“çš„Javaæºä»£ç ?br />
#B Waræ’äšgæä¾›çš„ä“Q务,用于归集WARæ–‡äšg
#C ¾~–译Java‹¹‹è¯•æºä»£ç ?br />
#D ˜q行å•å…ƒ‹¹‹è¯•
上述输出的æ¯ä¸€è¡Œéƒ½ä»£è¡¨æ‰§è¡Œäº†ä¸€ä¸ªç”±Java或Waræ’äšgæä¾›çš„ä“QåŠ¡ã€‚ä½ å¯èƒ½ä¼šæ³¨æ„到åQŒæœ‰ä¸€äº›ä“QåŠ¡è¢«æ ‡è®°ä¸ºUP-TO-DATEã€‚å®ƒçš„æ„æ€æ˜¯æŒ‡è¯¥ä»ÕdŠ¡è¢«èŸ©˜q‡åŽ»äº†ã€‚Gradleçš„å¢žé‡æž„建支æŒç–略会自动识别ä¸éœ€è¦æ‰§è¡Œçš„工作。特别是在大型商业项目ä¸åQŒè¯¥ç‰ÒŽ€§ä¼šæžå¤§åœ°èŠ‚çœæ—¶é—´ã€?/span>
åœ¨è¯¥å·¥ç¨‹çš„æ ¹èŠ‚ç›®å½•ä¸åQŒä½ ž®†ä¼šå‘现一个å为buildçš„å目录åQŒå®ƒåŒ…嫿œ‰æ‰§è¡Œæž„å»ÞZ¹‹åŽçš„全部输出åQŒåŒ…括类文äšgåQŒæµ‹è¯•报告,归集的WARæ–‡äšgåQŒä»¥åŠåƒmanifest˜q™æ ·çš„在打包旉™œ€è¦çš„临时文äšg。如下就是执行构建工作之åŽçš„工程目录¾l“æž„åQ?/span>
.
├── build
│ ├── classes
│ │ └── main #A
│ │ └── com
│ │ └── manning
│ │ └── gia
│ │ └── todo
│ │ ├── model
│ │ │ └── ToDoItem.class
│ │ ├── repository
│ │ │ ├── InMemoryToDoRepository.class
│ │ │ └── ToDoRepository.class
│ │ └── web
│ │ ├── ToDoServlet$ToDoListStats.class
│ │ └── ToDoServlet.class
│ ├── dependency-cache
│ ├── libs
│ │ └── todo-webapp.war #B
│ ├── reports
│ │ └── tests
│ │ ├── base-style.css
│ │ ├── css3-pie-1.0beta3.htc
│ │ ├── index.html
│ │ ├── report.js
│ │ └── style.css
│ ├── test-results
│ │ └── binary
│ │ └── test
│ │ └── results.bin
│ └── tmp
│ └── war
│ └── MANIFEST.MF #C
├── build.gradle
└── src
#A 包å«Java¾cÀL–‡ä»¶çš„默认目录
#B 归集的WARæ–‡äšg
#C 用于WARçš„äÍæ—¶manifestæ–‡äšg
ä½ å·²¾l知é“å¦‚ä½•ä»Žä¸€ä¸ªåŸºäºŽæ ‡å‡†ç›®å½•ç»“æž„çš„Web工程åŽÀLž„建WARæ–‡äšg。现在是时候将它布¾|²åˆ°ä¸€ä¸ªServlet容器ä¸åŽ»äº†ã€‚åœ¨ä¸‹ä¸€èŠ‚ä¸åQŒæˆ‘ä»¬å°†åœ¨æœ¬åœ°å¼€å‘æœºå™¨ä¸å¯åЍJetty去è¿è¡Œè¿™ä¸ªWeb应用ã€?/span>
˜q行应用
在本地机器丘q行一个Web应用应该很容易,能够实践快速应用开å?RAD)åQŒåƈ能够æä¾›å¿«é€Ÿçš„å¯åŠ¨æ—‰™—´ã€‚最‹‚’地是,它ä¸è¦æ±‚ä½ éƒ¨¾|²ä¸€ä¸ªWeb容器˜q行时环境。Jetty一个æµè¡Œçš„轻釾U§å¼€æºWeb容器åQŒå®ƒæ”¯æŒå‰é¢æåˆ°çš„æ‰€æœ‰ç‰¹æ€§ã€‚在˜q™ä¸ªWeb应用ä¸åŠ å…¥ä¸€ä¸ªHTTP模å—åQŒå®ƒž®±å˜æˆäº†ä¸€ä¸ªåµŒå…¥å¼å®žçŽ°ã€‚Gradleçš„Jettyæ’äšg扩展了Waræ’äšgåQŒå®ƒæä¾›çš„ä“Q务å¯ä»¥å°†ä¸€ä¸ªWeb应用部çÖv到嵌入å¼å®¹å™¨ä¸ï¼Œòq¶èƒ½å¤Ÿå¯åŠ¨è¯¥åº”ç”¨ã€‚åœ¨ä½ çš„æž„å¾è„šæœ¬ä¸ï¼Œå¯ä»¥åƒå¦‚ä¸‹é‚£æ ·ä‹É用这个æ’ä»Óž¼š
apply plugin: 'jetty'
˜q™ä¸ªž®†è¢«æˆ‘们用于å¯åЍWeb应用的ä“Q务å为jettyRun。它甚至å¯ä»¥åœ¨æ— 需创å¾WARæ–‡äšg的情况下å¯åŠ¨ä¸€ä¸ªJetty容器。执行上˜q°å‘½ä»¤åŽä¼šå¾—到如下åÅžå¼çš„输出åQ?/span>
$ gradle jettyRun
:compileJava
:processResources UP-TO-DATE
:classes
> Building > :jettyRun > Running at http://localhost:8080/todo-webapp-jetty
在上˜q°è¾“出的最åŽä¸€è¡Œä¸åQŒè¯¥æ’äšgå‘Šè¯‰äº†ä½ Jettyå›_°†ä¾¦å¬çš„请求地å€ã€‚æ‰“å¼€ä¸€ä¸ªä½ å–œæ¬¢çš„æµè§ˆå™¨åQŒåƈ输入上述地å€ã€‚最åŽï¼Œæˆ‘们会看到这个To Do Web应用的行为。图2展示在一个æµè§ˆå™¨ä¸æŸ¥çœ‹åˆ°è¯¥åº”用界é¢çš„æˆªå±ã€?/span>
å›? To Do应用的Web界é¢åŠå…¶è¡ŒäØ“
åœ¨ä½ é€šè¿‡¾l„åˆé”®CTRL+CåŽÕdœæ¢è¿™ä¸ªåº”用之å‰ï¼ŒGradle会让它一直è¿è¡Œã€‚Jetty如何知é“使用哪个端å£å’Œä¸Šä¸‹æ–‡çŽ¯å¢ƒåŽ»è¿è¡Œè¿™ä¸ªWeb应用åQŸå†è¯´ä¸€é,˜q™å°±æ˜¯è§„范。Jetty˜q行Web应用所使用的默认端å£å°±æ˜?080ã€?/span>
æ€È»“
åªéœ€è¦è¾ƒž®‘的努力åQŒä½ ž®±å¯ä»¥ä‹É用GradleåŽÀLž„å»ºåÆˆ˜q行一个Java Web应用。åªè¦ä½ ä¸¥æ ¼éµåó@æ ‡å‡†ç›®å½•¾l“æž„åQŒé‚£ä¹ˆä½ çš„æž„å»ø™„šæœ¬ä»…éœ€è¦ä¸¤è¡Œä»£ç ã€?/span> 
]]> - 最大é™åº¦åˆ©ç”¨Maven settings.xmlæ–‡äšg(è¯?http://www.aygfsteel.com/jiangshachina/archive/2009/08/14/291103.htmlSha JiangSha JiangFri, 14 Aug 2009 11:13:00 GMThttp://www.aygfsteel.com/jiangshachina/archive/2009/08/14/291103.htmlhttp://www.aygfsteel.com/jiangshachina/comments/291103.htmlhttp://www.aygfsteel.com/jiangshachina/archive/2009/08/14/291103.html#Feedback2http://www.aygfsteel.com/jiangshachina/comments/commentRss/291103.htmlhttp://www.aygfsteel.com/jiangshachina/services/trackbacks/291103.html最大é™åº¦åˆ©ç”¨Maven settings.xmlæ–‡äšg
John Ferguson在他çš?a >最新Blogä¸ï¼Œä»‹ç»äº†ä‹Éç”?a >Maven settings.xmlæ–‡äšg的一些鲜ä¸ÞZh知的技巧,希望对大家也有所助益ã€?2009.08.14æœ€åŽæ›´æ–?
å¦‚æžœä½ åœ¨ä»ÖM½•½E‹åº¦ä¸ä‹É用过MavenåQŒä½ 应该知é“settings.xmlæ–‡äšgã€?a >settings.xmlæ–‡äšgåŒ…å«æœ‰ä¸Ž¾pÈ»ŸçŽ¯å¢ƒç›¸å…³çš„é…¾|®ç»†èŠ‚ï¼Œä¾‹å¦‚ä»£ç†é…ç½®åQŒä»“库,æœåŠ¡å™¨çš„ç”¨æˆ·å和密ç åQŒç‰½{‰ã€?br />
䏋颿˜¯ä¸€ä¸ªå…¸åž‹çš„settings.xmlæ–‡äšg的示例:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>C:/maven/repository</localRepository>
<proxies>
<proxy>
<id>localproxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.acme.com</host>
<port>8080</port>
<username>scott</username>
<password>t0ps3cr3t</password>
<nonProxyHosts>*.acme.com</nonProxyHosts>
</proxy>
</proxies>

<servers>
<server>
<id>dbserver</id>
<username>scott</username>
<password>tiger</password>
</server>
</servers>

</settings>
例如åQŒè‹¥ä½ ä‹É用公å¸çš„环境åQŒåœ¨è¯¥çŽ¯å¢ƒä¸åQŒä½ çš„Mavenä¸È›®å½•是æ¯å¤©æ—©æ™¨å½“ä½ ç™Õd½•æ—¶ç”±¾|‘ç»œä¼ è¾“çš„ï¼ŒlocalRepositoryå…ƒç´ ž®×ƒ¼šéžå¸¸æœ‰ç”¨ã€‚在˜q™ç§æƒ…况 下,ž®†æœ¬åœîC»“åº“ç½®äºŽä½ æœ¬åœ°¼‚盘的ä¸åŒç›®å½•ä¸åQŒå°†ä¼šèŠ‚¾U¦å¤§é‡çš„带宽ã€?br />
ä½ ä¹Ÿå¯ä»¥åœ¨settings.xmlæ–‡äšgä¸å®šä¹‰ä»“库,镜åƒåQŒæ¦‚˜q°å’Œå±žæ€§ã€‚在æ¤å¤„åQŒæˆ‘䏿ƒ³æ¶‰åŠä¸Šè¿°å†…容åQŒå› ä¸ºåœ¨å…¶å®ƒåœ°æ–¹å·²ç»æœ‰å…³äºŽå®ƒä»¬çš„很好的文档了ã€?br />
很少ä¸ÞZh所知,或至ž®‘是很少被ä‹Éç”¨çš„åŠŸèƒ½æ˜¯ï¼Œåœ¨ä½ çš„pom.xmlæ–‡äšgä¸ä‹É用定义在settings.xmlæ–‡äšgä¸çš„æ•°æ®ã€?span style="font-size: 10pt;">äº‹å®žä¸Šï¼Œä½ èƒ½ä½¿ç”¨settings.xmlä¸çš„ä»ÖM¸€å…ƒç´ åQŒç„¶è€Œå…¶ä¸çš„ä¸€äº›åˆ™æ›´äØ“æœ‰ç”¨ã€?br />
一个普é且方便的例å就是ä‹Éç”?strong>localRepository å˜é‡ã€‚ä½ å¯èƒ½éœ€è¦å°†è¯¥å˜é‡ç½®äºŽä¸€ä¸ªè„šæœ¬ä¸åQŒæˆ–使用它æ¥å¼•用仓库ä¸çš„æŸä¸ªç‰¹å®šçš„JARæ–‡äšg(ž®½ç®¡é€šå¸¸æœ‰æ›´ä¼˜é›…的方案æ¥è§£å†³˜q™ä¸€é—®é¢˜)ã€‚ä½ å¯ä»¥é€šè¿‡½Ž€å•地引用${settings.localRepository}æ¥ä‹Éç”?strong>localRepository属性。例如,在下é¢çš„代ç ä¸ï¼Œæˆ‘们调用一个Ant脚本åQŒåƈ通过å䨓"localRepository"çš„å±žæ€§ä¼ ¾l™å®ƒä¸€ä¸ªæœ¬åœîC»“库èµ\径:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>generate-stuff</id>
<phase>pre-comile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<ant target="generate">
<property name="localRepository" value="${settings.localRepository}"/>
</ant>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
åšæ›´å¤šæœ‰‘£çš„事情åQŒç‰¹åˆ«æ˜¯å½“ä½ ä¹Ÿåœ¨æž„å¾ä¸é›†æˆäº†Groovy时。例如,å‡è®¾åœ¨é›†æˆæµ‹è¯•阶ŒD‰|œŸé—ß_¼Œæˆ‘们需è¦ç¡®ä¿ç‰¹å®šçš„SQL脚本已在数æ®åº“䏿‰§è¡Œ˜q‡äº†ã€‚我们有一个å为update-scripts.groovyçš„Groovy脚本æ¥åš˜q™äšg事情åQŒä½†å®ƒéœ€è¦ä»¥å‘½ä×oè¡Œå‚æ•°çš„å½¢å¼æä¾›ç”¨æˆ·å和密ç 。在集戋¹‹è¯•阶段之å‰åQŒä½ 应如何ä‹É用定义在settings.xmlä¸çš„用户å和密ç 呢?是的åQŒåªéœ€ä¸€ç‚¹å„¿Groovy™ì”术åQŒæ²¡æœ‰æ¯”˜q™å„¿æ›´ç®€å•的了ã€?strong>settings对象å¯ç”¨äºŽä“Q何集æˆåˆ°pom.xmlä¸çš„Groovy脚本åQŒæ‰€ä»¥ä½ å¯åƒä½¿ç”¨ä¸€ä¸ªæ™®é€šå¯¹è±¡é‚£æ äh–¹ä¾¿åœ°ä½¿ç”¨å®ƒï¼Œå¦‚下½CÞZ¾‹åQ?br />
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.0-rc-5</version>
<executions>
<execution>
<id>process-db-scripts</id>
<phase>pre-integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
def server = settings.servers.find{ it.id.equals('dbserver') }
"""groovy update-scripts.groovy -Ddb.username=${server.username}
-Ddb.password=${server.password}""".execute()
</source>
</configuration>
</execution>
</executions>
</plugin>
½Ž€å•ï¼äº‹å®žä¸Šï¼Œä¸€æ—¦ä½ 既知é“如何访问顶¾U§å˜é‡ï¼ŒåˆçŸ¥é“如何访问settings.xmlä¸çš„å„ä¸ªå…ƒç´ åQŒé‚£ä¹ˆå…¶åŠŸæ•ˆž®†ä¸å¯é™é‡ï¼åªéœ€è®îC½ä¸€å®šè¦ä½¿ä½ 的构å»ÞZ¿æŒå¼¹æ€?-例如åQŒä¸è¦åœ¨settings.xmlæ–‡äšgä¸å®šä¹‰é‚£äº›åœ¨pom.xmlæ–‡äšg䏿— 有效默认值的属性ã€?br />
å¦‚æžœä½ æƒ³å¦ä¹ 更多关于应用Maven的酷炫方法,查看最新的æ¥è‡ªäºŽSonatype的在¾U¿è¯¾½E?/a>。或者,ä¸ÞZº†æœ‰ä¸€ä¸ªæ›´å…·å…¨æ™¯çš„视角åQŒå¯ä»¥å‚åŠ?a >Java Power Tools bootcamp会议--å¾ˆå¿«åœ¨å ªåŸÒŽ‹‰åQŒæ‚‰ž®û|¼Œå¸ƒé‡Œæ–¯çå’Œæƒ çµé¡¿ž®±æœ‰ç ”讨会了ã€?

]]>- 出错时的软äšgå¼€å?è¯?http://www.aygfsteel.com/jiangshachina/archive/2008/10/27/236562.htmlSha JiangSha JiangMon, 27 Oct 2008 00:44:00 GMThttp://www.aygfsteel.com/jiangshachina/archive/2008/10/27/236562.htmlhttp://www.aygfsteel.com/jiangshachina/comments/236562.htmlhttp://www.aygfsteel.com/jiangshachina/archive/2008/10/27/236562.html#Feedback2http://www.aygfsteel.com/jiangshachina/comments/commentRss/236562.htmlhttp://www.aygfsteel.com/jiangshachina/services/trackbacks/236562.html出错时的软äšgå¼€å?/strong>
在开å‘çš„˜q‡ç¨‹ä¸æœ‰é”™è¯¯å‘ç”Ÿäº†ï¼Œæ¤æ—¶ä½ 该如何应对呢?John Ferguson Smart在他çš?a >最新åšå®?/a>䏿å‡ÞZº†ä¸€äº›æƒ³æ³•,大家å¯ä»¥å‚考一ä¸?2008.10.27æœ€åŽæ›´æ–?
çŽîC»Šæ¯”以åŽä“Q何时候,都需è¦å¼€å‘è€…æ›´åŠ é«˜æ•ˆã€‚æžåº¦é«˜æ•ˆã€‚组¾l‡éœ€è¦æé«˜ä»Žå®ƒä»¬çš„å¼€å‘项目ä¸å¾—åˆ°çš„é™„åŠ å€û|¼Œòq¶ä¸”它们也ä¹äºŽå¯»æ‰‘Ö®žçŽ°è¿™ä¸€ç›®æ ‡çš„æ–¹æ³•ã€?br />
当然åQŒä½ å¯ä»¥é‡‡ç”¨ä¼ 统的方æ³?-åŠªåŠ›å·¥ä½œã€‚äØ“äº†æ¶ˆé™¤é¡¹ç›®ä¸ä¸å¯é¢„è§çš„ç—‡çŠÓž¼Œæ¯å¤©å·¥ä½œ16ä¸ªå°æ—Óž¼Œ˜q˜æ²¡æœ‰å‘¨æœ«ã€‚但åšçš„æ›´èªæ˜Žä¸€ç‚¹å„¿åQŒä¼šä¸ä¼šæ›´å¥½äº›ï¼Ÿ
在引˜q›æ–°çš„实跉|–¹æ³•åŠæ”¹è¿›çŽ°æœ‰æ–ÒŽ³•æ–šw¢æŠ•入的相对多一些,以ä‹É¾l„织能努力获得更多回报,˜q™å°±æ˜¯å¼€å‘çš„˜q‡ç¨‹ã€‚一般而言åQŒäº‹ç‰©ä¸æœ‰è®¸å¤šæ–¹é¢éƒ½å¯ä»¥è¢«æ”¹˜q›ï¼Œä½†æ¤å¤„有一些尽H门能ä‹Éä½ çš„å¼€å‘æµ½E‹æ›´åŠ åˆç†ï¼Œåªæ˜¯ä¸ÞZ½ 开个头¾|¢äº†ã€?br />
æŒç®‹é›†æˆ(CI)通知½{–ç•¥çš„å†æ€è€?br />
到目å‰äØ“æ¢ï¼Œæœ€é€šç”¨çš„CI通知机制ž®±æ˜¯é™ˆæ—§çš„邮件æœåŠ¡å™¨ã€‚ç„¶è€Œï¼Œä½ èƒ½è‚¯å®šåœ¨ä½ æ‰‹è¾¹èƒ½å®Œæˆè¿™™å¹ä“Q务的最åˆé€‚ç³»¾lŸå°±æ˜¯ç”µå邮件å—åQŸå°è¯•ä¸ä½¿ç”¨ç”µåé‚®äšgåQŒè€Œä‹Éç”¨å³æ—¶æ¶ˆæ¯åŽ»å®Œæˆä½ çš„CI通知。记ä½ï¼Œç”µåé‚®äšg易æˆä¸ÞZ¸€¿Uå¹²æ‰?-å¦‚æžœä½ ä»…ä»…å¤§¾U¦æ¯ä¸¤å°æ—¶æ‰æŸ¥é˜…一‹Æ¡é‚®ä»Óž¼Œä½ 就会å˜å¾—å分高效。电åé‚®ä»¶åªæ˜¯ï¼Œæˆ–至ž®‘是åQŒç”¨äºŽæž„建失è´?-äºÞZ»¬éœ€è¦?em>å¿«é€?/em>地知晓失败ä“Q务ã€?br />
¿U¯æžåœîC¼˜åŒ–æž„å»ø™¿‡½E?/strong>
æž„å¾åº¦é‡(Build Metrics)是一¿Uç›‘æŽ§æž„å»ø™¿‡½E‹å¥åºïLжå†ëŠš„æžå¥½æ–ÒŽ³•ã€‚äØ“ä»€ä¹ˆè¿‡åŽ?周ä¸åQŒä»£ç 覆盖率一直在下é™åQŸäؓ什么å•元测试的数é‡òq¶æœªå‘ˆæœ‰è§„律的增长?ä¸ÞZ»€ä¹ˆè¦èŠÞp´¹å¾ˆé•¿çš„æ—¶é—´åŽ»ä¿®å¤˜q™æ ·çš„æž„建?˜q行å•å…ƒ‹¹‹è¯•需è¦å¤šé•¿æ—¶é—?-æ˜¯å¦æœ‰ä¸€äº›æµ‹è¯•éœ€è¦æ‰§è¡Œè¿‡åˆ†é•¿çš„æ—¶é—ß_¼Ÿ˜q™äº›ä¿¡æ¯òq‰™žåŽè€Œä¸å®žçš„东西--åœ¨ä¸æ–改˜q›æž„廸™¿‡½E‹çš„工作ä¸ï¼Œå®ƒä»¬éƒ½æ‰®æ¼”ç€å…³é”®çš„角艌Ӏ‚现代CI工具åQŒå¦‚HudsonåQŒBambooå’ŒTeamCityåQŒèƒ½ä¸ºæž„建展½CÞZ¸°å¯Œçš„¾lŸè®¡ã€‚Bamboo在这斚w¢åšçš„ž®¤ä½³ã€‚æ— è®ÞZ½ æ£ä‹É用何¿UCI工具åQŒéƒ½è¦å¦ä¹ 如何最大é™åº¦åœ°ä½¿ç”¨å®ƒçš„æŠ¥è¡¨ç‰ÒŽ€§ï¼Œòq¶ä‹É用这些特性去定ä½åŠä¿®å¤å¼€å‘过½E‹ä¸è®¨åŽŒæ±¡ç‚¹ã€‚å¦‚æžœä½ çš„CI工具ä¸èƒ½¾l™ä½ 所需è¦çš„全部信æ¯åQŒé‚£ž®±æ‰¾ä¸€ä¸ªèƒ½åšåˆ°çš„ã€?br />
åˆç†åŒ–å‘布过½E?/strong>
在å‘布过½E‹ä¸æœ‰è®¸å¤šå¿…åšçš„工作åQŒå¦‚准备å‘行说明åQŒç¡®å®šè¯¥ç‰ˆæœ¬ä¸å“ªäº›é—®é¢˜å·²è¢«è§£å†³äº†åQŒæ ‡è®°ç‰ˆæœ¬ï¼Œ½{‰ç‰ã€‚这些都是èÊY件生命周期的é‡è¦éƒ¨åˆ†åQŒå¦‚æžœä½ å¿½ç•¥äº†å®ƒä»¬ï¼ŒQA们和最¾lˆç”¨æˆ·å¯èƒ½ä¼šå¾ˆç”Ÿæ°”。但è¦å°½é‡è‡ªåŠ¨åœ°åŽÕdš˜q™äº›å·¥ä½œã€‚许多CI工具能很好地与问题追ítªç³»¾l?如JIRAå’ŒTrac)˜q›è¡Œé›†æˆåQŒä»¥ä¾¿ä½ 能基于版本控制日志看到æŸä¸ªé—®é¢˜æ˜¯åœ¨å“ª‹Æ¡ç‰¹å®šçš„æž„å¾ä¸è¢«è§£å†³çš„ã€‚å¦‚æžœä½ åœ¨ä‹É用EclipseåQŒMylynèƒ½å¸®ä½ å°†å¤„ç†˜q‡çš„问题归æ€ÀLˆé€»è¾‘å˜åŒ–¾l„,òq¶ä‹Éç”¨æ ‡å‡†çš„æ¨¡æ¿åˆ—出在柙å¹å·¥ä½œä¸å·²è¢«è§£å†³çš?或仅是媄å“到çš?é—®é¢˜ã€‚æˆ–è€…ä½ å¯ä‹É用Subversionçš„hook脚本åŽÈ¡®ä¿æ¯‹Æ¡å‘Subversionåšçš„æäº¤éƒ½èƒ½å¯¹åº”åˆîC¸€ä¸ªæœ‰æ•ˆçš„问题¾~–å·ã€?br />
˜q™åªæ˜¯ä¸€äº›æƒ³æ³•çÅžäº?-˜q˜æœ‰æ›´å¤šã€‚底¾U¿å°±æ˜?-ä½ ä¸éœ€è¦å¿è€ä¸€ä¸ªæ¬¡ç†æƒ³çš„å¼€å‘过½E?-相ååQŒè¦˜q›å…¥å…¶ä¸åQŒåƈåšäº›èƒ½æ”¹˜q›å®ƒçš„事情。ç¥å¥½è¿!

]]>