Liferay Tips


このページではLiferayに関するTipsを提供します。

*このページはLiferay5.0.1RCをベースに書かれています。
最新バージョンをお使いの方はご注意ください。


Outline
  1. Liferay Tips
    1. 開発に関するTips
      1. ページに同じポートレット複数を配置したい
      2. 外部jarをデプロイしたい
      3. ポートレットのタイトルを変更したい
      4. ポートレットIDを取得したい
      5. ユーザ情報を取得したい
      6. ユーザ名を取得したい
      7. ユーザIDを取得したい
      8. ハンドル名(Screen Name)を取得したい
      9. 肩書き(Job Title)を取得したい
      10. 権限、ユーザロール(role)を取得したい
      11. Company Objectを取得したい
      12. Validationしたい
      13. XSS対策を行いたい
      14. ユーザ登録や変更の際のValidationはどこで行われているの?
      15. 本家のソースに修正を加えてdeployしたい
      16. ポートレットをSAStrutsで開発したい
      17. よく使うdiv class
      18. Liferayのタグリブ(taglib)のソースを見たい
    2. 運用・管理に関するTips
      1. ロールってなに?
      2. 標準ロールの種類
      3. ユーザグループ、組織、コミュニティってなに?
      4. 企業を追加したい
      5. 組織を追加したい
      6. コミュニティを追加したい
      7. ユーザを追加したい
      8. 追加されるユーザのデフォルトのページを変更したい
      9. デフォルトテーマを変更したい
      10. ユーザを完全に削除したい
      11. プロキシ(proxy)を設定したい
      12. 追加されるユーザのデフォルトの権限を設定したい
      13. 追加したユーザからGuestページが見えないんですけど
      14. 追加したユーザからGuestページの編集ができないんですけど
      15. ログイン後に表示されるページを変更したい
      16. ログイン後に表示されるページを各ユーザのプライベートページにしたい
      17. ロケールが日本の時、「姓 名」と表示したい
      18. メールアドレス以外でログインしたい
      19. ログイン時の認証に独自のPipelineを使いたい
      20. ログイン時の認証にLDAPを使いたい
      21. ログイン時にActive Directoryを使いたい
      22. ログインポートレットに「ログイン状態を保存する」のチェックボックスを表示させたくない、自動ログインを無効にしたい
      23. Liferayのシステム時刻のタイムゾーンをJSTに変更したい
      24. アナウンスポートレットが公開時刻を過ぎても公開されないんですけど
      25. アプリケーションの追加メニューを編集したい
      26. アプリケーションの追加メニューからポートレットを削除したい
      27. デフォルトポートレットをインストールできるユーザロールを編集したい
      28. ロゴ画像(画面左上)を変更したい
      29. デフォルト(インストール時)のロゴ画像(画面左上)を変更したい
      30. OpenSSOを有効にしたら、ログインできなくなりました。OpenSSOを無効にする方法は?
      31. LDAPを有効にしたら、ログインできなくなりました。LDAPを無効にする方法は?
      32. 左上プルダウンメニューのマイプレイスを非表示にしたい
      33. 禁止文字を知りたい
    3. エラーに関するTips
      1. ERROR org.apache.struts.action.RequestProcessor - パス /example/huga/hoge に対するアクションのインスタンスがありません
      2. ERROR com.liferay.portal.struts.PortletRequestProcessor - Forward does not exist
      3. The requested resource (/htmlportlet.xxx.xxx) is not available
      4. Ant Deployが途中で止まる

開発に関するTips


ページに同じポートレット複数を配置したい

  • ポートレットには、同一ページに一つしか配置できないものと、複数配置できるものの2種類あります。変更するには、liferay-portlet.xmlへ<instanceable>true</instanceable>を追記します。例えば、検索ポートレット(portlet-name:3)を複数配置したい場合は以下のようにします。


before

  1. <portlet>
  2. <portlet-name>3</portlet-name>
  3. <icon>/html/portlet/search/icon.png</icon>
  4. <struts-path>search</struts-path>
  5. <!--<open-search-class>com.liferay.portal.search.PortalOpenSearchImpl</open-search-class>-->
  6. <use-default-template>false</use-default-template>
  7. <restore-current-view>false</restore-current-view>
  8. <private-request-attributes>false</private-request-attributes>
  9. <private-session-attributes>false</private-session-attributes>
  10. <render-weight>0</render-weight>
  11. <css-class-wrapper>portlet-search</css-class-wrapper>
  12. <add-default-resource>true</add-default-resource>
  13. </portlet>
after
  1. <portlet>
  2. <portlet-name>3</portlet-name>
  3. <icon>/html/portlet/search/icon.png</icon>
  4. <struts-path>search</struts-path>
  5. <!--<open-search-class>com.liferay.portal.search.PortalOpenSearchImpl</open-search-class>-->
  6. <use-default-template>false</use-default-template>
  7. <restore-current-view>false</restore-current-view>
  8. <instanceable>true</instanceable>
  9. <private-request-attributes>false</private-request-attributes>
  10. <private-session-attributes>false</private-session-attributes>
  11. <render-weight>0</render-weight>
  12. <css-class-wrapper>portlet-search</css-class-wrapper>
  13. <add-default-resource>true</add-default-resource>
  14. </portlet>


  • もしポートレットに<form>を使用している場合は、ポートレットを複数配置してsubmitした場合に不都合がおきるので、対策をします。

    対策:formのname属性の中に<portlet:namespace />を使用する。
    1. <form action="<liferay-portlet:actionURL portletConfiguration="true"/>"
    2. method="post" name="<portlet:namespace />fm">
    3. </form>



外部jarをデプロイしたい

  • 外部jarは、/ext-lib/portal/ に配置。
    デプロイ実行後、実行環境下の /server/default/deproy/ROOT.war/WEB-INF/lib/ にデプロイされる。



ポートレットのタイトルを変更したい

  • /ext-impl/classes/content/Language_ja.propertiesに記入
    1. javax.portlet.title.xpath=XPath



ポートレットIDを取得したい

  • ViewActionクラスでの取得
    1. PortletConfigImpl configImpl = (PortletConfigImpl)config;
    2. String portletId = configImpl.getPortletId();
  • Configuration.jspでの取得
    1. String portletId = ParamUtil.getString(request, "portletResource");
  • ConfigurationActionImplクラスでの取得
    1. String portletId = ParamUtil.getString(req, "portletResource");



ユーザ情報を取得したい

  1. User user = UserLocalServiceUtil.getUserById(getUserId());

参考: http://www.liferay.com/web/raymond.auge/blog/-/blogs/%5Bhowto%5D-personalization-getting-current-user-attributes

ユーザ名を取得したい

  • javax.portlet.RenderRequest#getRemoteUser()を使う
    1. String userName = req.getRemoteUser();



ユーザIDを取得したい

  • com.liferay.portal.service.impl.PrincipalBean#getUserId()
  • com.liferay.portal.util.PortalUtil#getUserId(request)
  • jspなら、下記で取得
    1. long loginUser = (ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY).getUserId();



ハンドル名(Screen Name)を取得したい

  1. com.liferay.portal.service.UserLocalServiceUtil#getUserById(long userId)を使ってUserを取得
  2. com.liferay.portal.model.UserModel#getScreenName()を使う
    1. User user = UserLocalServiceUtil.getUserById(getUserId());
    2. String screenName = user.getScreenName();
  • UserLocalServiceUtilクラスには、User ID以外でもUserを取得できるメソッドが用意されている



肩書き(Job Title)を取得したい

* com.liferay.portal.model.implにgetJobTitle()が実装されていないので、このままでは取得できません。
JobTitleはUserと関連するContactから取得できる。

  1. User user = UserLocalServiceUtil.getUserById(getUserId());
  2. String jobTitle = user.getContact().getJobTitle();



権限、ユーザロール(role)を取得したい

  • com.liferay.portal.service#getUserRoles(long userId)を使う
    1. List<Role> roles = RoleLocalServiceUtil.getUserRoles(userId);
    2. Iterator<Role> iterator = roles.iterator();
    3. while (iterator.hasNext()) {
    4. Role item = iterator.next();
    5. if (item != null) {
    6. System.out.println(item.getName());
    7. }
    8. }



Company Objectを取得したい

  • com.liferay.portal.util.PortalUtil#getCompany(HttpServletRequest req)を使う
    1. Company company = com.liferay.portal.util.PortalUtil.getCompany(req);



Validationしたい

  • com.liferay.portal.kernel.util.Validatorクラスを使う
    1. String password = ParamUtil.getString(req, "password");
    2. if (Validator.isNull(password)) {
    3. return mapping.findForward("/portal/portlet/error");
    4. }



XSS対策を行いたい



ユーザ登録や変更の際のValidationはどこで行われているの?



本家のソースに修正を加えてdeployしたい

  • /ext-impl/src 以下に本家と同じパッケージを作るとext-impl.jarに含まれるので、優先して呼ばれます。



ポートレットをSAStrutsで開発したい

参考:http://sastruts.seasar.org/portlet.html

よく使うdiv class

  • <div class="portlet-msg-info">
  • <div class="portlet-msg-alert">
  • <div class="portlet-msg-error">



Liferayのタグリブ(taglib)のソースを見たい

  • tld
    • liferay-portal-src-5.0.1/util-taglib/src/META-INF/liferay-ui.tld
  • jsp
    • liferay-portal-src-5.0.1/portal-web/docroot/html/taglib/ui
  • java
    • liferay-portal-src-5.0.1/util-taglib/src/com/liferay/taglib




運用・管理に関するTips


ロールってなに?

  • ロールの種類として、3 種類が定義されています
    • すべてのユーザに必ず付与される「標準ロール」
    • 組織に所属するユーザに付与される「組織ロール」
    • コミュニティに所属するユーザに付与される「コミュニティロール」



標準ロールの種類

Administratorシステム管理ポートレットを利用できるロール
Power Userユーザよりも多くのポートレットを利用できるロール
User一般的なポートレットを利用できるユーザロール
Guestログイン前のユーザロール



ユーザグループ、組織、コミュニティってなに?

  • Liferayでユーザを管理するの集合です。 ユーザ以外のオブジェクトは、子要素を持つことができ、複数のユーザを 1 つの集合として表すことができます。 ユーザ < ユーザグループ < 組織 < コミュニティ の順で、グループ化できるオブジェクトが多くなります。
    ユーザオブジェクト説明子要素
    ユーザシステムを利用する1ユーザなし
    ユーザグループ複数のユーザのグループ化ユーザ
    組織
    複数のユーザのグループ化
    複数組織のグループ化
    ユーザ、組織
    コミュニティ
    複数のユーザのグループ化
    複数組織のグループ化
    複数ユーザグループのグループ化
    ユーザ、組織、ユーザグループ



企業を追加したい

  • システムの管理ポートレット -> 「インスタンス」タブ -> 「追加」ボタン



組織を追加したい

  • 組織の管理ポートレット -> 「組織」タブ -> 「組織の追加」ボタン



コミュニティを追加したい

  • コミュニティの管理ポートレット -> 「コミュニティの追加」ボタン



ユーザを追加したい

  1. Welcomeプルダウンメニュー -> アプリケーションの追加 -> 管理用ポートレット -> 企業の管理ポートレット をページに配置
  2. 「ユーザの追加」ボタンをクリック
  3. ハンドル名・メールアドレス・名・姓を入力し保存
  4. 保存後の画面中段の「パスワードタブ」からパスワードを設定しないとログインできないので注意 adduser.PNG



追加されるユーザのデフォルトのページを変更したい

  • potal-ext.propertiesに以下を追記。
    1. #
    2. # 初期ページの名前を指定
    3. #
    4. default.user.layout.name=Home
    5. #
    6. # レイアウトテンプレートの名前を指定
    7. #
    8. #default.user.layout.template.id=1_2_1_columns
    9. #default.user.layout.template.id=1_column
    10. #default.user.layout.template.id=2_2_columns
    11. #default.user.layout.template.id=2_columns_i
    12. default.user.layout.template.id=2_columns_ii
    13. #default.user.layout.template.id=2_columns_iii
    14. #default.user.layout.template.id=3_columns
    15. #
    16. # レイアウトのカラムにあわせてポートレットを配置。
    17. # ポートレットはポートレットIDで指定。
    18. #
    19. default.user.layout.column-1=71_INSTANCE_OY0d,82,23,61,65,
    20. default.user.layout.column-2=11,29,8,19
    21. default.user.layout.column-3=
    22. default.user.layout.column-4=



デフォルトテーマを変更したい



ユーザを完全に削除したい

  • Liferayでは、停止状態のユーザのみ削除できます。まず、企業の管理からユーザを選択して「停止にする」ボタンを押してください。
  • 検索オプションからアクティブを”いいえ”へ変更してください。
  • 検索で表示されたユーザを完全に削除することができます。



プロキシ(proxy)を設定したい

  • system-ext.propertiesに以下を追記。
    1. ##
    2. ##プロキシの設定
    3. ##
    4. http.proxyHost=192.168.0.200
    5. http.proxyPort=4480
    6. ##
    7. ##プロキシを使わないサイトの設定
    8. ##
    9. #http.nonProxyHosts=192.168.0.250



追加されるユーザのデフォルトの権限を設定したい

  • 企業の管理ポートレット -> 設定 -> ユーザのデフォルトの関連付け



追加したユーザからGuestページが見えないんですけど

  • ユーザ、またはユーザが所属している組織・ユーザグループをGuestコミュニティに配属してください
  1. Welcomeプルダウンメニュー -> アプリケーションの追加 ->コミュニティ -> コミュニティの管理 をページに配置
  2. コミュニティ管理ポートレットの「すべてのコミュニティ」タブをクリック
  3. Guestコミュニティの操作ボタン -> メンバーの配属
  4. 「現在の設定」タブの隣にある「設定の追加」タブ(グレーアウトしていて見つかりにくい!)
  5. 配属させたいユーザをチェックし、配属の更新ボタン(組織ごと更新させたい場合は、上の「組織」タブから同じ操作を行う。ユーザグループも同様。)



追加したユーザからGuestページの編集ができないんですけど

  • ユーザ、またはユーザが所属している組織・ユーザグループにGuestコミュニティの権限を追加してください
  1. Welcomeプルダウンメニュー -> アプリケーションの追加 ->コミュニティ -> コミュニティの管理 をページに配置
  2. コミュニティ管理ポートレットの「すべてのコミュニティ」タブをクリック
  3. Guestコミュニティの操作ボタン -> 権限設定
  4. 「現在の設定」タブの隣にある「設定の追加」タブ(グレーアウトしていて見つかりにくい!)
  5. 権限を追加させたいユーザをチェックし、権限の更新ボタン(組織ごと更新させたい場合は、上の「組織」タブから同じ操作を行う。ユーザグループも同様。)



ログイン後に表示されるページを変更したい

  • portal-ext.propertiesに以下を追記
    1. デフォルトページの指定
      1. ##
      2. ## Default Landing Page
      3. ##
      4. default.landing.page.path=/web/guest/home
    2. auth.forward.by.last.pathをtrueへ
      1. ##Keeps system from returning to last path.
      2. auth.forward.by.last.path=true
      ちなみに、
      1. login.events.post=com.liferay.portal.events.LoginPostAction,com.liferay.portal.events.DefaultLandingPageAction
      として、com.liferay.portal.events.LoginPostAction,com.liferay.portal.events.DefaultLandingPageActionで制御することもできる



ログイン後に表示されるページを各ユーザのプライベートページにしたい

  • portal-ext.propertiesに以下を追記
    1. デフォルトページを空に
      1. ##
      2. ## Default Landing Page
      3. ##
      4. default.landing.page.path=
    2. auth.forward.by.last.pathをfalseへ
      1. ##Keeps system from returning to last path.
      2. auth.forward.by.last.path=false



ロケールが日本の時、「姓 名」と表示したい

  • Liferayの仕様では、「ファーストネーム セカンドネーム」と表示されます。例:太郎 山田。変更するには、以下のソースを編集してください。
    • com.liferay.portal.model.impl.ContactImpl.java
      1. public String getFullName(String languageId) {
      2. if(languageId.equals("ja_JP"))
      3. return getFullName(getLastName(), getMiddleName(), getFirstName());
      4. else
      5. return getFullName(getFirstName(), getMiddleName(), getLastName());
      6. }
    • com.liferay.portal.model.impl.UserImpl.java
      1. public String getFullName() {
      2. return getContact().getFullName(getLanguageId());
      3. }
    • com.liferay.portal.model.Contact.java
      1. public java.lang.String getFullName(String languageId);



メールアドレス以外でログインしたい

  1. 企業の管理ポートレット -> 左上のアイコンから最大化 -> 「設定」タブ -> 「認証」タブ -> 「認証はどちらで行いますか?」を変更
  2. portal-ext.propertiesに以下を追記し、修正
  • メールアドレス以外に、ScreenName(ハンドル名)、User IDが用意されています。
    1. #
    2. # The portal can authenticate users based
    3. # on their email address, screen
    4. # name, or user id.
    5. #
    6. company.security.auth.type=emailAddress
    7. #company.security.auth.type=screenName
    8. #company.security.auth.type=userId



ログイン時の認証に独自のPipelineを使いたい



ログイン時の認証にLDAPを使いたい

  1. Welcomeプルダウンメニュー -> アプリケーションの追加 -> 管理用ポートレット -> 企業の管理ポートレット をページに配置
  2. ポートレット右上に並ぶアイコンの右から2番目の最大化をクリックして、ポートレットを最大化する
  3. 「設定」タブ -> 「認証」タブ -> 「LDAP」タブ から設定する
  4. portal-ext.propertiesに下記を追加
    1. auth.pipeline.pre=com.liferay.portal.security.auth.LDAPAuth



ログイン時にActive Directoryを使いたい

  1. web.xmlの編集
    変更前:
    1. <filter-mapping>
    2. <filter-name>Ntlm Filter</filter-name>
    3. <url-pattern>/c/portal/login</url-pattern>
    4. </filter-mapping>
    変更後:
    1. <filter-mapping>
    2. <filter-name>Ntlm Filter</filter-name>
    3. <url-pattern>/*</url-pattern>
    4. </filter-mapping>
  2. 「企業の管理」ポートレットを最大化 -> 「設定」タブ -> 「認証」タブ -> LDAPの設定
  3. IEの設定
    ツール -> インターネットオプション -> 「セキュリティ」タブ -> イントラネット -> サイト -> 詳細設定 -> 次のWebサイトをゾーンに追加する -> LiferayマシンのIPを追加




ログインポートレットに「ログイン状態を保存する」のチェックボックスを表示させたくない、自動ログインを無効にしたい

企業の管理ポートレット -> 「>>」タブで最大化 -> 設定タブ -> 認証タブ -> 自動ログインを許可しますか?のチェックを外す



Liferayのシステム時刻のタイムゾーンをJSTに変更したい



アナウンスポートレットが公開時刻を過ぎても公開されないんですけど

  • システム時刻のタイムゾーンがJSTに設定されているか↑を参考に確認してください。



アプリケーションの追加メニューを編集したい

  • ext-web/docroot/WEB-INF/liferay-display.xmlを編集します。



アプリケーションの追加メニューからポートレットを削除したい

  • ext-web/docroot/WEB-INF/liferay-portlet-ext.xmlを編集します。 削除したいポートレットへ<include>false</include>を追加します。



デフォルトポートレットをインストールできるユーザロールを編集したい

  • ソースのportal-web/docroot/WEB-INF/portlet-custom.xmlをコピーして、ext-web/docroot/WEB-INF/portlet-custom.xmlを作成します。
  • <security-role-ref>タグを編集します。



ロゴ画像(画面左上)を変更したい

  • 企業の管理ポートレット -> 最大化 -> 設定タブ -> 画面中断にロゴ画像が表示されます。画像下の「変更...」から変更できます。



デフォルト(インストール時)のロゴ画像(画面左上)を変更したい



OpenSSOを有効にしたら、ログインできなくなりました。OpenSSOを無効にする方法は?

  • DBのダンプファイルから、下記のvalueをfalseへ変更し、インポートしてください。
    1. lportal.portletpreferences:open.sso.auth.enabled
  • MySQLの場合
    • dumpファイルをエクスポート
      1. #mysqldump -uliferay -p lportal portletpreferences > lportal_portletpreferences.dump
    • lportal_portletpreferences.dumpをテキストエディタで開き、下記のように修正。
      1. <name>open.sso.auth.enabled</name><value>true</value>
      2. <name>open.sso.auth.enabled</name><value>false</value>
  • dumpファイルをインポート
    1. #mysql -uliferay -p lportal < lportal_portletpreferences.dump



LDAPを有効にしたら、ログインできなくなりました。LDAPを無効にする方法は?

  • DBのダンプファイルから、下記のvalueをfalseへ変更し、インポートしてください。
    1. lportal.portletpreferences:ldap.auth.enabled
    2. lportal.portletpreferences:ldap.auth.required
  • MySQLの場合
    • dumpファイルをエクスポート
      1. #mysqldump -uliferay -p lportal portletpreferences > lportal_portletpreferences.dump
    • lportal_portletpreferences.dumpをテキストエディタで開き、下記のように修正。
      1. <name>ldap.auth.enabled</name><value>true</value>
      2. <name>ldap.auth.enabled</name><value>false</value>
      3. <name>ldap.auth.required</name><value>true</value>
      4. <name>ldap.auth.required</name><value>false</value>
  • dumpファイルをインポート
    1. #mysql -uliferay -p lportal < lportal_portletpreferences.dump



左上プルダウンメニューのマイプレイスを非表示にしたい

  • ROOT.war/html/themes/_unstyled/templates/init.vmを修正してください
    #set ($show_my_places = $user.hasMyPlaces())
    ↓
    #set ($show_my_places = false)
    



禁止文字を知りたい

* ユーザ名(ScreenName)での禁止文字

ユーザID以外の数字のみ、または.(PERIOD) と -(DASH)以外の記号が含まれているとNG
Liferay5.2.xからは、FriendlyURLNormalizer.normalizeで変換される。
portal-impl\src\com\liferay\portal\security\auth\ScreenNameValidator.java

* フォルダ・ファイル名での禁止文字

/ のみまたは, \\,//,:,*,?,",<,>,|,&,[,],' が含まれているとNG
portal-impl\src\com\liferay\documentlibrary\service\impl\DLServiceImpl.java

* ユーザーグループの名前

数字のみ、または, (COMMA) *(STAR)が含まれているとNG
portal-impl\src\com\liferay\portal\service\impl\UserGroupLocalServiceImpl.java

* ロールの名前

数字のみ、または, (COMMA) *(STAR)が含まれているとNG
portal-impl\src\com\liferay\portal\service\impl\RoleLocalServiceImpl.java

*パスワードポリシーの名前

数字のみ、または, (COMMA) *(STAR)が含まれているとNG
portal-impl\src\com\liferay\portal\service\impl\PasswordPolicyLocalServiceImpl.java

*コミュニティの名前

数字のみ、または, (COMMA) *(STAR)が含まれているとNG
portal-impl\src\com\liferay\portal\service\impl\GroupLocalServiceImpl.java

・Wikiのノードの名前

文字以外はNG。
文字の定義は以下。
  0x41 - 0x7a まで(A-Z [\]^_`a-z)



エラーに関するTips


ERROR org.apache.struts.action.RequestProcessor - パス /example/huga/hoge に対するアクションのインスタンスがありません

  • struts-config.xmlに定義してある<action>タグを見直してみてください



ERROR com.liferay.portal.struts.PortletRequestProcessor - Forward does not exist

  • struts-config.xmlに定義してある<action>タグ内の<forward>タグを見直してみてください



The requested resource (/htmlportlet.xxx.xxx) is not available

  • tiles-defs.xmlの定義を見直してください



Ant Deployが途中で止まる

[javac] コンパイラで例外が発生しました (1.5.0_16)。Bug Parade に同じバグが登録されていないことをご確認の上、
Java Developer Connection (http://java.sun.com/webapps/bugreport) にてバグの登録をお願いいたします。
レポートには、そのプログラムと下記の診断内容を含めてください。ご協力ありがとうございます。
    [javac] java.nio.BufferOverflowException
    [javac]     at java.nio.Buffer.nextPutIndex(Buffer.java:419)
    [javac]     at java.nio.HeapCharBuffer.put(HeapCharBuffer.java:145)
    [javac]     at com.sun.tools.javac.parser.Scanner.decode(Scanner.java:405)
    [javac]     at com.sun.tools.javac.parser.Scanner.<init>(Scanner.java:304)
    [javac]     at com.sun.tools.javac.parser.Scanner.<init>(Scanner.java:238)
    [javac]     at com.sun.tools.javac.parser.Scanner$Factory.newScanner(Scanner.java:72)
    [javac]     at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:254)
    [javac]     at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:281)
    [javac]     at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:399)
    [javac]     at com.sun.tools.javac.main.Main.compile(Main.java:592)
    [javac]     at com.sun.tools.javac.main.Main.compile(Main.java:544)
    [javac]     at com.sun.tools.javac.Main.compile(Main.java:67)
    [javac]     at com.sun.tools.javac.Main.main(Main.java:52)
  • 現象 Antが途中で止まる。
  • 原因は不明ですが、javaファイルが原因で起こるようです。空白改行が原因?
  • 対策
    • 直前に編集したjavaファイルを削除して、コンパイルまで進むかどうか試してみる。
    • おそらく、あるファイルを削除した時点でコンパイルまで進むようになるので、そのファイルの空白改行を削除したりしてみる。