4.3(Kepler)」タグアーカイブ

Eclipse(Pleiades)でJDK8

エクリプスのWikiをみてみるとJDK8用のパッチがリリースされている。

というわけで早速入れてみる。

今回の環境は4.3.2ベースのPleiades。Lunaでもいけるらしい。

まず、インストール前の素の状態。

インストール済みJREには設定できるけどランタイムには指定できない。

1

2

 

新規ソフトウェアの追加から次へ次へと行けばいい模様。

Help > Install New Software...
enter the following URL into the 'Work with' field:
http://download.eclipse.org/eclipse/updates/4.3-P-builds/

きっとこれやれば8の指定ができるってことなのだろうとインストールしようとしたら。

3

 

で、依存関係の計算で止まってしまった。

4

 

しばらく放置して進むか確認してみます。。。

っということで放置していたら動きました。

実行環境で8選べるようになってます。

 きしださんのソースをコピらせていただいて軽く動作確認。

package hoge;

import java.util.Arrays;
import java.util.List;

public class Fuga {
	public static void main(String... args){
	    List<String> strs = Arrays.asList("hoge", "foo", "yeah");
	    System.out.println(strs.toString());

	    strs.replaceAll(t -> "** " + t + " **");
	    System.out.println(strs.toString());
	}
}

とりあえず動いているっぽい。

あとは隙間を見つけて。

 

JStyleがエラー

昨日エクリプス(4.3)をアップデートしてからJStyleがエラー。エラー内容は以下。

java.lang.NoClassDefFoundError: org/eclipse/swt/graphics/GC$JStyleSWTBridge
    at jp.sourceforge.mergedoc.jstyle.JStylePlugin.applySWT(JStylePlugin.java:89)
    at jp.sourceforge.mergedoc.jstyle.JStylePlugin.earlyStartup(JStylePlugin.java:81)
    at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:87)
    at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2551)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.graphics.GC$JStyleSWTBridge cannot be found by jp.sourceforge.mergedoc.jstyle_4.3.0.0
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

java.lang.NoClassDefFoundError: org/eclipse/swt/graphics/GC$JStyleSWTBridge
    at jp.sourceforge.mergedoc.jstyle.JStylePlugin.applySWT(JStylePlugin.java:89)
    at jp.sourceforge.mergedoc.jstyle.JStylePlugin.earlyStartup(JStylePlugin.java:81)
    at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:87)
    at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2551)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.graphics.GC$JStyleSWTBridge cannot be found by jp.sourceforge.mergedoc.jstyle_4.3.0.0
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

 

JStyleSWTBridgeというクラスがないと言っている。

Eclipseアップデートした際にあまり注意していなかったけど4.3.0から4.3.1に上がっていて、(Pleiadesにもともと入っていた)JStyle用にカスタマイズされたjarが上書きされてエラーをはいている状況っぽい。

JStyleのページから4.3.1用のものを落としてきて、プラグインフォルダに上書き&4.3.0のJStyle(※)を削除

-clean付きで起動したらOK

自分の環境はWindows7 64bitだけどどのOSでも似たような事象だと思う。

 

propedit(プロパティエディタ)とSysdeo Tomcatが警告残っているので、4.3.1に上げた影響で他にもところどころ直す必要が出てくるかも。

 

※以下のJar

jp.sourceforge.mergedoc.jstyle_4.3.0.0.jar
org.eclipse.swt.win32.win32.x86_64.source_3.102.0.v20130605-1544.jar
org.eclipse.swt.win32.win32.x86_64.source_3.102.0.v20130605-1544.jar.backup
org.eclipse.swt.win32.win32.x86_64_3.102.0.v20130605-1544.jar.backup

 

 

eclipseのglassfish用プラグイン

Eclipseのアップデートを行ったところ「http://dlc.sun.com.edgesuite.net/glassfish/eclipse/kepler/ のリポジトリーが見つかりません。」と怒られた。

 

アドレス少し削って

http://dlc.sun.com.edgesuite.net/glassfish/eclipse/

とすると

Attention – GlassFish plugins will be distributed exclusively as part of the OEPE package.

To get information about OEPE, please visit OEPE page on OTN.

と出てきました。

少し前にtwitterで言ってたかも。。

 

というわけでプラグインから削除

M2E(Maven)のproperty外部化

以前JavaFXのMaven設定を行った際にjfxrt.jarへのパスはpomに直接記載していた。別端末(別のパス)で使用しようとしたときに外部化した際の手順。

 

設定を記載するsetting.xmlを作成。(proxyを使う際等に既に作っていることも多い。)

Defaultは下。(自分はEclipseの設定->Maven->ユーザ設定から変更)

    The Maven install: $M2_HOME/conf/settings.xml
    A user's install: ${user.home}/.m2/settings.xml

作成した内容は以下。

profile -> propertiesの下に、キー、値を指定する。

(参考サイト

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline/>
  <pluginGroups/>
  <servers/>
  <mirrors/>
  <proxies/>
    <profiles>
        <profile>
            <id>javafx2</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <javafx2.home>C:\develop\pleiades43\pleiades\java\7\lib\jfxrt.jar</javafx2.home>
            </properties>
        </profile>
    </profiles>
  <activeProfiles/>
</settings>

pomで直接記載していた個所が変数で指定できるようになっている。

 

     <dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>javafx</artifactId>
            <version>2.0</version>
            <scope>system</scope>
            <systemPath>${javafx2.home}</systemPath>
        </dependency>

 

今回参考にさせてもらったビルドまで記載されているブログ

JavaFXソース、JavaDoc添付(Eclipse 4.3 Kepler)

JavaFXのソースとJavaDocのアタッチのをしていなく何かと不便なので添付する。

そもそもPleiadesに入っていたJava 7にくっついていたもの程度の意識なのでまずはこちらのソースを使ってバージョンを調べる。

javafx.runtime.version: 2.2.25-b15

だそう。

まずJavaDocから入れようとダウンロードサイトを開くとjavafx-2_2_25-apidocs.zipとbuild番号が付いていない。ダウンロードしてみて、レポジトリのチェンジログと比べるとb19の変更が反映されているので時系列に差がある模様。とはいえ、リリースノートが下な感じで、大きな修正は言ってもいないのでそのまま突き進む。

The full version string for this update release is 1.7.0_25-b15 (where "b" means "build") except for Windows on which it is 1.7.0_25-b17. The version number is 7u25.

 

疲れたので、以下作業予定で今日は挫折。 (7/22 再開)

ソースダウンロード(そもそもMercurial入れなければいけないので入れる) -> リンク先の右上にダウンロード用リンクあったので、zipでダウンロード。

ソースとJavaDocを適宜フォルダを作って配備。(C:\dev\attachment\javafx2.2.25)

pomの修正(Localレポジトリを作成しないときれいに添付できないかもしれない。参照先)

プロパティー->Javaのビルドパス->ライブラリー->maven依存関係->jafxt.jarのJavadoc添付、ソース添付から設定することで妥協。

 

JavaFXのMaven(M2E)設定(Eclipse 4.3 Kepler)

Eclipse4.3(実際に使っているのはPleiades all in one)にてM2Eを使ってJavaFXをMavenプロジェクトとして動かすまでのメモ。

新規->その他->Maven->Mavenプロジェクトから次へ次へといってアーキタイプの選択を開く

以前入れたリモートレポジトリに入っているorg.codehaus.mojo.archetypesのjavafxを選択

注:JavaFXのアーキタイプは何種類かあるようでディレクトリ構造は、JavaFX用アークテクとタイプの中でも結構ばらついている。なのでスタンダードな構造はきちんと調べた方がいいかも。

a

 

任意の名前をつけてプロジェクトを作成。

そのままだとJavaFX用のJarをMavenが見えていないので「FXML を型に解決できません」とか「インポートされた javafx は見つかりません」とかで怒られる。

pom.xml(プロジェクト直下ある)にjarのパスを依存関係に追加してやって「Maven->プロジェクトの更新」とやってやると動くようになる。(今のとこ無難に動いている模様。)

追加した内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>jp.co.epea</groupId>
    <artifactId>firstfxclient</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>firstfxclient</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mainClass>jp.co.epea.firstfxclient.MainApp</mainClass>
    </properties>

    <organization>
        <!-- Used as the 'Vendor' for JNLP generation -->
        <name>Your Organisation</name>
    </organization>

    <dependencies> <-アーキタイプによってはすでにあるので注意(dependencyタグだけでよい)
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>javafx</artifactId>
            <version>2.0</version>
            <scope>system</scope>
            <systemPath>C:\dev\pleiades43\java\7\lib/jfxrt.jar</systemPath> <-パスは実際にある場所
        </dependency>
    </dependencies>
    <build>

(8/5追記)

パスの外部化と、参考サイトへのリンク記事追加

(12/15追記)

実行可能Jarの作り方リンク

 

eclipse上でのglassfish4をDebugするための追加手順

EclipseでGlassfish4をDebugしようとすると、69%起動とでてそこで固まってしまう事象が発生。(というか、Debugをしたら毎回だった。)

 

調べると、”Glassfish 4.0 adapter in Eclipse”のバグとのこと。

(7/11追記)

改めてバグ情報を見直すと下のようにあるのでGlassFishの3系でも発生していた模様。

Same issue than chemi, fresh Kepler 64 bits installation on Windows 7 64 bits.
Same problem with glassfish 3 or 4.

(7/11追記終了)

(8/4追記)

eclipseのサーバ追加時に設定したglassfish用のID/Passwordと、glassfishに実際に設定してあるID/Passwordが違う場合も発生した。(glassfish 4.0のデフォルトは”admin/無”っぽい)

(8/4追記終了)

Fix版でていてUpdateManager経由でインストールできるとのことなので早速インストール。

http://download.java.net/glassfish/eclipse/juno

 

インストール後Eclipse再起動し、Eclipse上でのサーバ(サーバビューに出るやつ)も再度作り直した。

完全に死にきっていないものがあったのかPortがふさがっている旨のメッセージが出たのでPCごと再起動したところ、無事にデバッグできるようになった。

 

 

DebugできなかったときEclipseのlogに出ていたスタックトレースは以下のはず。(退避していなかったけど時間的におそらく。。。)

 

(起動時)

!ENTRY oracle.eclipse.tools.glassfish 4 150 2013-07-08 17:35:17.312
!MESSAGE Unable to start server on time.
!STACK 0
java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:258)
at java.util.concurrent.FutureTask.get(FutureTask.java:119)
at oracle.eclipse.tools.glassfish.GlassfishGenericServerBehaviour.launchServer(GlassfishGenericServerBehaviour.java:170)
at oracle.eclipse.tools.glassfish.GlassfishServerLaunchDelegate.startDASAndTarget(GlassfishServerLaunchDelegate.java:201)
at oracle.eclipse.tools.glassfish.GlassfishServerLaunchDelegate.launch(GlassfishServerLaunchDelegate.java:109)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:858)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:707)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:700)
at org.eclipse.wst.server.core.internal.Server.startImpl2(Server.java:3537)
at org.eclipse.wst.server.core.internal.Server.startImpl(Server.java:3473)
at org.eclipse.wst.server.core.internal.Server$PublishJob.run(Server.java:311)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

 

(再起動時)

!ENTRY oracle.eclipse.tools.glassfish 4 1 2013-07-09 22:42:05.118
!MESSAGE GlassFish: in SunAppServerBehaviour restart
!STACK 1
org.eclipse.core.runtime.CoreException: Unable to start server on time.
at oracle.eclipse.tools.glassfish.GlassfishServerLaunchDelegate.abort(GlassfishServerLaunchDelegate.java:73)
at oracle.eclipse.tools.glassfish.GlassfishServerLaunchDelegate.startDASAndTarget(GlassfishServerLaunchDelegate.java:205)
at oracle.eclipse.tools.glassfish.GlassfishServerLaunchDelegate.launch(GlassfishServerLaunchDelegate.java:109)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:858)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:707)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:700)
at oracle.eclipse.tools.glassfish.GlassfishGenericServerBehaviour$1.run(GlassfishGenericServerBehaviour.java:238)
Caused by: java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:258)
at java.util.concurrent.FutureTask.get(FutureTask.java:119)
at oracle.eclipse.tools.glassfish.GlassfishGenericServerBehaviour.launchServer(GlassfishGenericServerBehaviour.java:170)
at oracle.eclipse.tools.glassfish.GlassfishServerLaunchDelegate.startDASAndTarget(GlassfishServerLaunchDelegate.java:201)
… 5 more
!SUBENTRY 1 oracle.eclipse.tools.glassfish 4 150 2013-07-09 22:42:05.118
!MESSAGE Unable to start server on time.
!STACK 0
java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:258)
at java.util.concurrent.FutureTask.get(FutureTask.java:119)
at oracle.eclipse.tools.glassfish.GlassfishGenericServerBehaviour.launchServer(GlassfishGenericServerBehaviour.java:170)
at oracle.eclipse.tools.glassfish.GlassfishServerLaunchDelegate.startDASAndTarget(GlassfishServerLaunchDelegate.java:201)
at oracle.eclipse.tools.glassfish.GlassfishServerLaunchDelegate.launch(GlassfishServerLaunchDelegate.java:109)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:858)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:707)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:700)
at oracle.eclipse.tools.glassfish.GlassfishGenericServerBehaviour$1.run(GlassfishGenericServerBehaviour.java:238)

WebSocket(JSR 356)を使ってみる。その1(まずは軽く触れてみる)

EclipseからGlassfishを使う環境は何とかできたっぽいのでWebSocketを使ってみる。

少し前の情報からアノテーションがダイナミックに変わっているので注意。

@WebSocketEndpoint -> @ServerEndpointとかとか(リンク

 

こちらのブログを参考にまずはほぼコピペして動作確認。

キャプチャを簡単にできるかと軽く見てみたけどIE10の開発ツールは特に表示されない模様。

FFのTamperData(プラグイン)では、Connectionがupgradeされていることまでは確認できたけど、upgrade後の動作は見れない模様。コネクションクローズ等も拾えなかった。

WebSocketキャプチャ

(request)

Status=Web Socket Protocol Handshake – 101
X-Powered-By=Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.0  Java/Oracle Corporation/1.7)
Server=GlassFish Server Open Source Edition  4.0
Connection=Upgrade
Sec-WebSocket-Accept=ZjJVgnGKxiMQbZjHxqx5bR7qVGY=
Upgrade=websocket

(responce)

Host=localhost:8080
User-Agent=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0
Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language=ja,en-us;q=0.7,en;q=0.3
Accept-Encoding=gzip, deflate
Sec-WebSocket-Version=13
Origin=http://localhost:8080
Sec-WebSocket-Key=LLDpCnocJ5IY/JIJfax1mw==
Cookie=JSESSIONID=2718b10db58913be398a83618d52
Connection=keep-alive, Upgrade
Pragma=no-cache
Cache-Control=no-cache
Upgrade=websocket

Chromeのデベロッパーツールでも同様に、Upgradeまでしか拾えない模様。

なお、Wiresharkだとキャプチャできるとのことなので後ほど使ってみる。

 

ちなみに下のようにアノテーションを削った場合は404と素直なエラーがでてくれた。

//@ServerEndpoint(“/hello”)
public class HelloWorld {

Status=Not Found – 404
X-Powered-By=Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.0  Java/Oracle Corporation/1.7)
Server=GlassFish Server Open Source Edition  4.0

JavaEE7(GlassFish4.0)のEclipse4.3(Kepler)におけるMaven(M2E)連携

Eclipse4.3でMavenプロジェクトを作成しようとしたら手間だったので手順の記録。

 

最初にm2e-wtp(Mavan Integration for Eclipse WTP)をマーケットプレースからインストール。

ヘルプ->Eclipseマーケットプレース->検索で「m2e-wtp」にてインストールを実行。

Junoと書いてあるがリリース元によると”m2e-wtp 1.0.0 adds Java EE 7 support in Kepler”となっている。

マーケットプレース

Pleiades All in Oneだとアップデートでいいかどうかを聞かれるがとりあえず次へ次へとそのままインストール

WTPインストール手順1

WTPインストール手順2

WTPインストール手順3

 

新規->MavanプロジェクトからMavanプロジェクトを作成しようとしたところ、アーキタイプにwebapp-javaee7が無い。(Eclipse4.2ではこれででてきた記憶がある。。)

Mavenプロジェクト追加1-1

 

理由があって外されたか、間にあっていないだけかは不明。

取り急ぎ、Mavenのリモートカタログを追加して凌ぐことにする。

ウィンドウ->設定->Maven->アーキタイプ->リモートカタログの追加から

http://repo1.maven.org/maven2/archetype-catalog.xmlをリモートカタログとして追加。

 

Maven2-1

Maven2-2

 

Eclipse再起動後(?)にwebapp-javaee7が選べるようになっているので指定しMavenプロジェクトとして作成。

Mavenプロジェクト追加1-1i

 

以下m2eのライフサイクルのエラーが出るのでクイックフィックスから修正。

Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-dependency-plugin:2.6:copy (execution: default, phase: validate)

(lifecycle-mapping-metadata.xmlをきちんと書いたほうがいいのかもしれないけどリンク先がわからなくなった。一応中国語参考のリンク

フィックス1

フィックス2

途中で対象を聞かれるのでとりあえずデフォルト

フィックス3

修正がすんだらプロジェクトをAlt+F5でMavenビルドしてサーバに追加したらOK。

 

リンク

GlassFish4まだろくに触っていないけど、Eclipse4.3(Kepler)がリリースされたので連携してみる。

Oracleのサイトを見ると、OEPEのUpdateManagerのリモートロケーションはまだ対応していないみたい。

OEPEリモート対応状況

 

アーカイブからのupdateは対応済みなのでいったん、Zipをダウンロード。

oepeレポジトリ

 

ヘルプ->新規ソフトウェアのインストール->使用可能なソフトウェアサイト->追加から先ほどのZipを指定。

b

 

追加したソフトウェアサイトからGlassFishツールをインストール。(ついでにドキュメントも)

プラグイン選択

 

そのまま次へ次へ同意とぽちぽち押して再起動。

 

07/09追加

Debugができなかったらリンク先の手順も追加