差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
java:gradle:build_jar [2016/09/15 16:28]
tony [First Step]
java:gradle:build_jar [2023/06/25 09:48] (目前版本)
行 1: 行 1:
 {{tag>​gradle}} {{tag>​gradle}}
 ====== Build jar ====== ====== Build jar ======
-===== First Step =====+===== Introduction ===== 
 +建立jar檔是build的基本,目的可能是為了建立可執行jar檔或給其它專案參考的jar檔。本篇主要記載我所遇到的問題。 
 +===== Encoding Error =====
 如果是已經能夠在eclipse上成功編譯了,通常在加入以下宣告後,就能成功build出jar檔:​ 如果是已經能夠在eclipse上成功編譯了,通常在加入以下宣告後,就能成功build出jar檔:​
 <code bash> <code bash>
行 9: 行 11:
 } }
 </​code>​ </​code>​
 +然而我出現了encoding為MS950問題:​\\
 +{{:​java:​gradle:​gradle_encoding_problem.png|}}\\
 +雖然我檔案儲存編碼為UTF-8,但gradle卻以系統編碼做為預設去編譯。因此,我加入以下宣告設定encoding:​
 +<code bash>
 +compileJava {
 +    options.encoding = '​UTF-8'​
 +}
 +</​code>​
 +===== Compiler Error - cannot find symbol of the inner class =====
 +某個類別中有個inner class,而那個inner class使用gradle編譯時會出現以下錯誤:​\\
 +{{:​java:​gradle:​gradle_compile_problem_with_innerclass_of_interface.png|}}\\
 +參考此[[http://​stackoverflow.com/​questions/​28174433/​gradle-compilejava-cannot-find-symbol-from-source-file|link]]提及使用完整的package名稱可以解決此問題,一試果然可以解決:​
 +<code java>
 +static interface MyKernel32 extends Library
 +->
 +static interface MyKernel32 extends com.sun.jna.Library
 +</​code>​
 +另外一個方式就是別用inner class,不過我想會用inner class就是考慮到封裝問題吧! 不過還沒找到根本原因,以後有機會使用到gradle再研究看看。
 +===== Deprecation and Unchecked Warning =====
 +編譯時非常有可能因為程式碼或引用函式庫的關係,出現Deprecation與Unchecked Warning:\\
 +{{:​java:​gradle:​gradle_depracation_unchecked_warning.png|}}\\
 +我們可以在compileJava中加入以下宣告,去看詳細內容了解原因並解決:​
 +<code bash>
 +compileJava {
 +    options.compilerArgs << "​-Xlint:​unchecked"​ << "​-Xlint:​deprecation"​
 +}
 +</​code>​
 +以Deprecation來說,就是去使用新的API介面;Unchecked如果確認無礙,就宣告@SuppressWarnings("​unchecked"​)。
 +
 +=====    =====
 +----
 +\\
 +~~DISQUS~~