S-JIS[2013-08-29/2013-08-30] 変更履歴

Eclipseプラグイン 更新サイトのビルド

Eclipseプラグイン開発更新サイト作成時のエラーについて。


概要

更新サイトプロジェクトのsite.xmlでビルドを実行するとartifacts.jar・content.jarファイルとfeatures・pluginsディレクトリーが作られるが、
logs.zipというファイルが作られることがある。

logs.zipは何らかのエラー(コンパイルエラー)があったときに作られ、中にはログファイルが入っている。

さらに厄介なことに、コンパイルエラーの状態でもプラグインのjarファイルは生成される。
しかしコンパイルエラーがあるクラスは、各メソッドが「throw new Error("コンパイルエラーの内容");」というコードで置き換えられる。
したがって、プラグインをインストールして実際に呼ばれる段階でエラーが発生することになる。


UTF-8のエラー

WindowsにインストールしたEclipse(3.7 indigo、4.2 juno、4.3 kepler)(デフォルトのエンコーディングはMS932)において、
ワークスペース(およびプラグインプロジェクト)内のファイルのエンコーディングをUTF-8にしているとき、
javaソースファイル内のコメントやStringリテラル内の日本語が文字化けし、
更新サイトのビルド時にコンパイルエラーになることがある。


例として、「カンマ」という文字列が入っていると、このエラーが発生する。
(Eclipseのメインメニューの「Window」→「Preferences」で設定ダイアログを開き、ツリーから「General」→「Workspace」を選んで「Text file encoding」をUTF-8にしておく)

プラグインプロジェクト/src/〜/Activator.java(UTF-8):

public class Activator extends AbstractUIPlugin {

	public static final String COMMA = "カンマ";
〜
}

Javaとしては特に問題の無いコードで、Eclipseのエディター上では特に問題は無い。

が、この状態でビルドすると、更新サイトプロジェクト/logs.zipが作られ、その中に「@dot.log」というファイルが出来ている。

@dot.log:

# 13/08/29 21:13:30 JST
# Eclipse Compiler for Java(TM) v20130604-1421, 3.9.0, Copyright IBM Corp 2000, 2013. All rights reserved.
----------
1. ERROR in D:\workspace\ex1plugin\src\ex1plugin\Activator.java (at line 11)
	public static final String COMMA = "カン��?;
	                                   ^^^^^^^^
String literal is not properly closed by a double-quote
----------
1 problem (1 error)

「マ」の字が文字化けして直後のダブルクォーテーションを巻き込み、ダブルクォーテーションが無かったことになって
文字列が閉じていないのでコンパイルエラーになっている。

同様に「//カンマ」というコメントだと、「マ」の直後の改行コードを巻き込むので、次の行のソースがコメントアウト状態になってしまう!

Xtextのソース整形時に遭遇した事象


たぶん、ビルド時にJavaのコンパイルを行っているのだが、エンコーディングがMS932(Windowsのデフォルト)のままなんじゃないかと思う。

ソースファイルのエンコーディングをMS932にするか、プラグインプロジェクトのbuild.propertiesにエンコードを指定する。[2013-08-30]

source.. = src/
output.. = classes/
bin.includes = plugin.xml,\
               META-INF/,\
               .,\
               icons/

javacSource.. = 1.6
javacTarget.. = 1.6
javacDefaultEncoding.. = UTF-8

Eclipseプラグインへ戻る / Eclipseへ戻る / 技術メモへ戻る
メールの送信先:ひしだま