2013-08-03 19 views
0

我想建立一個過程,在那裏我可以爲我的web應用程序生成縮小和優化的JS,作爲將更新代碼用git推送到web服務器的過程的一部分。在Linux上設置Closure Compiler的好方法是什麼?或者,Java .jar應該在Linux上運行?

這是相當簡單的運行它:java -jar ./compiler.jar script.js

當然,如果我有十個項目,我不要十compiler.jar秒。

如果我在這裏堅持下去:/usr/local/lib/compiler.jar我的電話只是看起來愚蠢:

java -jar /usr/local/lib/compiler.jar script.js 

這將更有意義,傾倒它~像我跟其他一切沒有一個地方去做。它只是覺得馬虎。

是否有一些目錄,我可以將我的罐子粘在一起,這樣我就可以更容易地運行它們,而不必爲每個罐子設置(符號鏈接)shell腳本(或者更好的shell命令別名)想用嗎?

例如,不應該有一個系統,我把我的jar放在一個全局指定的java lib目錄中,之後我可以調用java closure script.js

編輯:我試圖把它jre/lib/ext,我發現在這裏,但它沒有工作:如果直接使用java命令

$ find /usr/lib | grep jre/lib/ext       
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25.x86_64/jre/lib/ext 
.... bunch of other jar files here 
$ cp ~/compiler.jar /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25.x86_64/jre/lib/ext 
$ java -jar compiler.jar script.js 
Error: Unable to access jarfile compiler.jar 
+0

我開始想,也許我應該保持罐子每一個項目。 ಠ_ಠ –

回答

1

我的回答更多的是建議你不要重新發明輪子,希望能夠幫助你解決問題,但是你沒有參與 - 但是,因爲你已經在你自己的評論中提出,它可能是好的在每個項目中都包含該jar。 :-)

我建議把jar放在每個項目中,並使其自包含或更好:在每個項目中運行一個安裝腳本,它從遠程位置獲取jar。

您可以手動編寫腳本安裝腳本,或者進一步使用任務運行器來創建自己的構建工具鏈,您可以在多個項目上重複使用該構建工具鏈。

我們轉變我們的項目結構Grunt任務(http://gruntjs.com)咕嚕包含一個封閉編譯器插件(以及更多的插件,例如sass)。每個項目都包含一個Grunt配置文件,它指定了所有的任務,例如測試,構建,您可以在給定的項目上調用它。所以你必須在你的機器上安裝一次Grunt,Grunt將爲給定的項目提取所有任務,並負責下載closure-compiler.jar並調用閉包編譯器。因此,即使您現在可能認爲:「我只需要閉包編譯器」,最終您可能需要另一個工具B併爲工具B啓動bash腳本。我建議你在學習上投入更多時間,例如Grunt,並使用社區的工作。

一個側面說明:我們使用Grunt之前,我建立構建工具鏈與另一個taskrunner,Gradlehttp://www.gradle.org),這是受歡迎的Java項目,由一個事實,即關閉,compiler.jar本身就是一個Java動機項目。這工作相當不錯,但我終於注意到,有更多的基於Web項目的Grunt支持比Gradle。因爲我相信正確的工具是正確的工作,所以我的結論是:使用Grunt for JavaScript-Projects,Gradle for Java/JVM。

+0

謝謝,這看起來像一個很好的方式來解決發明幾個輪子 –

+0

我最初開始建立一個shell腳本或makefile系統做「編譯風格」的任務,所以當我提交代碼時,它也將包括生成碼。 Grunt似乎正好填補了這種角色。 –

+0

這裏看來是用於獲得封閉編譯器的良好乾淨安裝的具體方向,用於例如使用。 grunt-closure-compiler:https://github.com/gmarty/grunt-closure-compiler#closure-compiler-installation-from-source然而,抓住jar下載可能是最聰明的。至少這不需要每個項目都有一個jar的副本。 –

0

,那麼你就必須提供一個路徑有問題的罐子。將jar放在一個地方並創建一個處理調用和jar路徑的shell腳本可能更容易。

0

我使用了別名,我認爲它比坐在某個地方的shell腳本實現大致相同的效率要高效得多。

alias closure='java -jar /opt/closure-compiler/compiler.jar' 

在使用中:

closure --js i.js --js_output_file i.min.js 
相關問題