カテゴリー別アーカイブ: JDK 8

関西地区でフリーエンジニアを探してます

 

 

どもども、システム開発の(株)エペア改めクライミングジムロシェの北村です。

10/29追記。

ありがとうございます。開発譲れそうなエンジニアのめど立ちました。

ユーザとの顔合わせこれからですがいったんしめさせてもらいます。

 

ジム運営がいっぱいいっぱいでシステム開発に手が回っていません。

そんな事情がありコンサル(肩書的には契約社員)をしている会社から「お前ができないなら変わり探せよ!!」っと詰められてます(><)

 

そーいうわけでフリーランスの人(または小規模法人)を只今探しております。

 

アレな人だとアレですができる限り丸投げ(!?)したい感じです。

(人いなければ頑張るしかないですが)

 

細かいことは問い合わせてもらわないといえないですが

エンドユーザは

・技術要素は言語も含め比較的自由に選べる

・保守契約もあり前提

・発注元はPCもよくわかってないぐらいだけど必要な金は払う心づもり有

・「ナンカPCウゴカナイヨ」には付き合ってください

・PC関係はよくわからないけど必要なら必要な分(金)は出す

という感じです

 

中抜き無し、技術はかなり自由に選べるエンドユーザで継続発注ありなので悪い話ではないと思います。

なお、自分は監視役で

手抜き・ぼったくり・スキルないのにはったりをしないように見ています。

 

 

興味あるひとは

kitamura@epea.co.jp

までお願いいたします。

 

 

 

 

 

 

 

 

 

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());
	}
}

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

あとは隙間を見つけて。

 

Bug 236029

NetBeans 7.4にてJDK8を使用し、MavenのWebアプリケーションを作成しようとしたところエラーが発生したもようで、プロジェクトが作成されない。

表示->IDEのログと進んでいくと以下のエラーが発生していた。

WARNING [org.openide.WizardDescriptor]
java.lang.NullPointerException
    at org.netbeans.modules.maven.j2ee.ui.wizard.BaseWizardIterator.saveSettingsToNbConfiguration(BaseWizardIterator.java:110)
    at org.netbeans.modules.maven.j2ee.ui.wizard.EEWizardIterator.instantiate(EEWizardIterator.java:138)
    at org.openide.loaders.TemplateWizard$InstantiatingIteratorBridge.instantiate(TemplateWizard.java:1046)
    at org.openide.loaders.TemplateWizard.handleInstantiate(TemplateWizard.java:605)
    at org.openide.loaders.TemplateWizard.instantiateNewObjects(TemplateWizard.java:439)
    at org.openide.loaders.TemplateWizardIterImpl.instantiate(TemplateWizardIterImpl.java:248)
    at org.openide.loaders.TemplateWizardIteratorWrapper.instantiate(TemplateWizardIteratorWrapper.java:160)
    at org.openide.WizardDescriptor.callInstantiateOpen(WizardDescriptor.java:1629)
    at org.openide.WizardDescriptor.callInstantiate(WizardDescriptor.java:1570)
    at org.openide.WizardDescriptor.access$2300(WizardDescriptor.java:92)
[catch] at org.openide.WizardDescriptor$Listener$2$1.run(WizardDescriptor.java:2257)
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1432)
    at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2042)

NetBeansのバグだがFIXされているとのこと。

ただし、11/16時点でダウンロードサイトよりダウンロードした日本語のJavaEEには適用されていないっぽい。

(適用方法または適用されているものはこれから調べる。)

->11/17追記

開発版の最新だとうまく動いたのでこれを使う。(Build 201311160002)

 

Eclipse(Luna)のスケジュール感

Eclipse(Luna)のJDK 8対応状況をみるとJava Model とかもぼちぼち手がつけられそうな状況になってきた。いまのところMLにあった感じに秋(original GA in September)にはぼちぼち触れるようになりそうかなぁ。

ラムダ式周りをPMDかFindbugsのカスタムルール作りつつ様子見ようと思ったけど、自分が手を出すには技術不足感に満ち溢れているので挫折。

なおJDTのgitレポジトリは以下。

  • JDT Core repository – git://git.eclipse.org/gitroot/jdt/eclipse.jdt.core.git
  • JDT UI repository – git://git.eclipse.org/gitroot/jdt/eclipse.jdt.ui.git

詳細情報は

http://wiki.eclipse.org/Platform-releng/Git_Workflows

 

 

 

Effectively final

先日のJJUGナイトセミナー(前半資料/後半資料)でfianlつけていなくてもfinalとみなされるEffectively finalというものがJava 8から導入されるという話を聞いた。(前半資料16pに出てくる「実質的final」)

public class JavaApplication1 {
    public static void main(String[] args) {
        String hoge = "こんにちは世界。";
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println(hoge);
            }
        };
        r1.run();

        Runnable r2 = () -> {
            System.out.println(hoge);
        };
        r2.run();
    }
}

上みたいなfinalの付いていない変数(String hoge)も代入していなければfinalとみなして匿名クラス、ラムダ式の中で使えるようになったとのこと。

 

ちなみにJava 7までだと下みたいにエラー。

a

 

final付いていないけどfinal扱いなので再代入したらだめ。

String hoge = "こんにちは世界。";
        hoge ="こんばんわ";
        Runnable r1 = new Runnable() {
            @Override

とか

            public void run() {
                hoge ="こんばんわ";
                System.out.println(hoge);
            }

とか

        Runnable r2 = () -> {
            hoge ="こんばんわ";
            System.out.println(hoge);
        };

とか。

エラーがある状態で(Netbeansから?)実行すると

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - 内部クラスから参照されるローカル変数は、finalまたは事実上のfinalである必要があります

とか

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - ラムダ式から参照されるローカル変数は、finalまたは事実上のfinalである必要があります

わかりやすいメッセージが表示される。

軽く触った感じだときれいに動いている。

(講演してくれた方がこのfinalまわりでよくはまったといっていたので、まだトラップありそうな気がする)

JDK8バグ?

先日のJDK 8をWindowsにインストールするとレジストリに書き込まれるっぽい問題を避けるために、NetbeansとJDK 8をCentOS(6.4 64bit)にインストールした。起動しようとしたところ下のようなエラーが発生。

java.lang.IllegalArgumentException: committed = 52752384 should be < max = 50331648
    at java.lang.management.MemoryUsage.<init>(MemoryUsage.java:162)
    at sun.management.MemoryImpl.getMemoryUsage0(Native Method)
    at sun.management.MemoryImpl.getNonHeapMemoryUsage(MemoryImpl.java:75)
    at org.netbeans.core.ui.warmup.DiagnosticTask.logParams(DiagnosticTask.java:193)
    at org.netbeans.core.ui.warmup.DiagnosticTask.run(DiagnosticTask.java:82)
[catch] at org.netbeans.core.startup.WarmUpSupport.run(WarmUpSupport.java:98)
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1432)
    at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2042)

JDKのバグ??

WarmUpSupportとかいうのが死んだっぽいけどcommittedがmax越えるって設定ミスじゃなさそうだし、まぁ多分JDKもNetbeansも両方EAだし。ハローワールドのレベルだと動いたのでとりあえず放置。

 

 

 

JDK8とScene Builder 1.0の併用不可?

(7/25追記)

この件はJDK 8インストール時にPublic JREのインストールをはずしておけば大丈夫だった。

a

 

他にもちょこちょこ触っていたので濡れ衣かもしれないけどもWindwos7の64bitではJDK 8(EA)とScene Builder 1.0の併用は単純には不可っぽい。

64bit版Windows7にてJDK 8(Early AccessのBuild b98)をインストールした翌日に、Scene Builder 1.0を起動しようとしたところ起動できなくなっていた。

java -versionで1.8を呼んでいるので

JAVA_HOME=C:\Program Files\Java\jdk1.7.0_25
Path=C:\Program Files\Java\jdk1.7.0_25\bin;~

な感じに環境変数をセットして1.7にパスを通しなおしてみたけどだめ。

レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime EnvironmentをみるとCurrentVersionに1.8とかレジストリはいろいろ書いてある。

scenebuilder.exeなのでそっちを見てうまくいかないのかな??

ということで、JDK 8(とアプリ的には別にインストールされていたJRE 8)をアンインストールしたら無事に起動できた。

濡れ衣かも知れないけどそういうことと思っておこう。。。。

 

NetBeans IDE 7.4 Beta

twitterを見てたらJDK 8のLambdasが使えるようになったベータ版のNetBeansが出たとのこと。

Preview support for JDK 8 features: Profiles, Lambdas 

早速ダウンロード(すべて版)

インストーラーを次へ次へという感じでデフォルトでインストール

デスクトップにできたアイコンをダブルクリックで起動

a

ぱっとみサンプルプロジェクトとデモには、ラムダのサンプルはなさそう。

 

JDKは同梱されていない(ような)ので今日の時点のアーリーアクセス最新版をダウンロード

注意:既存Javaが不安定になるかも Public JRE のインストールしない方がいい -> リンク

JDKをインストーラーで次へ次へとインストール

Public JRE はインストールせずに残りは次へ次へ

a

 

NetBeansで

実行->プロジェクトの構成を設定->カスタマイズと進み

ライブラリ->プラットフォームの管理->プラットフォームの追加からJDKのインストールパス(C:\Program Files\Java\jdk1.8.0)を指定してJDK8を設定した後に設定したJDKを選択。

b

 Oraleのサイトからクイックスタートのソースをコピペしたが

また「ラムダ式はsource 1.7でサポートしてません。うんぬん」と怒られている。

c

 

実行->プロジェクトの構成を設定->カスタマイズ->ソースからJDK8を選択

c

 

サンプルのRunnable Lambdaは無事に動作。

(ラムダ式になっていない)匿名クラスも「この匿名内部クラスをラムダ式に変換できます。」という気の利いたメッセージがでて、

d

alt+enterで出てくる変換候補を選ぶとラムダ式に変換された。おぉ!

(元)

    // Anonymous Runnable
    Runnable r1 = new Runnable(){

      @Override
      public void run(){
        System.out.println("Hello world one!");
      }
    };

(変換後)

    // Anonymous Runnable
    Runnable r1 = () -> {
        System.out.println("Hello world one!");
            };