使用 fileset 元素包含和排除文件或目錄,能夠包含 Ant 通配符。例如:html
<fileset dir="./src" includes="**/*.js"/> <fileset dir="./src" includes="**/*.js" excludes="**/*-test.js"/>
filelist 元素須要明確指定要包含的文件。例如:
java
<filelist dir="./src" files="core/core.js"/>
JSHint 是用 JavaScript 編寫,須要使用 Rhino 命令行 JavaScript 引擎執行它,從 http://www.mozilla.org/rhino 下載 Rhino,並把 js.jar 文件放在依賴文件夾裏(lib.dir)。git
直接在命令行運行 JSHint:java -jar js.jar jshint-rhino.js [list of files] [options] github
例如:shell
java -jar js.jar jshint.js curly=true,noempty=true core/core.jsapache
注意:我本身寫例子執行上面的命令老是會報異常,後來在 JSHint 網站上找到有人報了這個 ISSUE (https://github.com/jshint/jshint/issues/1333),並提供了一個修改後的 jshint.js(http://download-ln.jetbrains.com/idea/jshint/jshint-2.3.0.js ),這樣我才把上面的命令跑起來。另外 ISSUE #1422(https://github.com/jshint/jshint/issues/1422)指出從 2.3.0 開始出現這個問題。我從新下載了 2.2.0 版後,果真問題沒有了。app
說明:參考相關文檔後,發現像 "curly=true……「這樣的選項是放在後面的,書中的例子都寫在前面了。curl
直接執行命令行太原始了,要利用 Ant 進行構建,能夠使用 <java> 任務代替上面的命令行。
ide
說明:此書做者使用的 <apply> 任務,該任務在最新版的 Ant 中已經廢棄,所以我這裏的例子使用的是 <java> 任務。網站
示例:
<target name="validate"> <java jar="js.jar" fork="true"> <arg path="jshint.js"/> <arg path="core/core.js"/> <arg line="curly=true,forin=true,latedef=true,noempty=true,undef=true"/> </java> </target>
一次處理多個文件:
<target name="validate"> <fileset id="srcfileset" dir="${src.dir}" includes="**/*.js"/> <pathconvert property="srcfiles" pathsep=" " refid="srcfileset"/> <java jar="js.jar" fork="true"> <arg path="jshint.js"/> <arg path="${srcfiles}"/> <arg line="curly=true,forin=true,latedef=true,noempty=true,undef=true"/> </java> </target>
注:<java> 任務不支持 fileset ,參考了 http://ant.1045680.n5.nabble.com/List-of-file-names-as-arguments-to-a-java-task-td1341160.html 後發現了上面的解決方法。
要想在代碼驗證失敗時阻止任務繼續往下執行,能夠給 <java> 任務設置 failonerror = "true" 屬性。
抽離可變的部分:
js.jar 的位置
jshint.js 的位置
命令行參數
把它們定義到屬性或者屬性文件中再導入是更好的選擇。下面是一個屬性文件的例子:
src.dir = ./src lib.dir = ./lib rhino = ${lib.dir}/js.jar jshint = ${lib.dir}/jshint.js jshint.options = curly=true,forin=true,latedef=true,\ noempty=true,undef=true,rhino=false
這樣就能夠在目標中引用這些屬性了。例如:
<target name="validate"> ... <java jar="${rhino}" fork="true" failonerror="true"> <arg path="${jshint}"/> <arg line="${srcfiles}"/> <arg path="${jshint.options}"/> </java> </target>
導入 Buildr.xml 文件後,經過 <fileset> 元素便可使用 <jshint> 任務。
<target name="validate"> <jshint> <fileset dir="${src.dir}" includes="**/*.js"/> </jshint> </target>
也能夠使用 options 屬性來更改默認選項。
<target name="validate"> <jshint options="${jshint.options}"> <fileset dir="${src.dir}" includes="**/*.js"/> </jshint> </target>
說明:剛剛去 Buildr 官網看了下,2 年沒有更新了,估計是沒什麼人氣。