Posts tagged ‘Java’

2017年度版:Java サーバの利用状況のアンケートのお願い

サーバ・サイド Java の開発・運用に携わっていらっしゃる方に質問がございます。現在、サーバ・サイドのJava 開発環境もしくは本番環境で、どのサーバ (Webコンテナ、アプリケーション・サーバ)をご利用いただいているか理解したいと考えております。そこで、大変恐れ入りますが下記のアンケートにご協力いただけないでしょうか。

昨年 (2016年) は、669名の方にご協力いただきました。ご協力誠にありがとうございました。
2016年版:Java サーバ利用状況アンケート結果の公開

今年のアンケートの締め切りは 7/12(水) 18:00 までとさせていただきます。
昨年も1週間のアンケート期間だったため、公平をきすためにも同じ1週間で実施いたします。また、速報は同日開催する「関ジャバのナイトセミナー」で発表します。

複数ご回答いただいてもかまいません。個人情報は取得しませんし、この結果を売買に使うことも決してありません。利用状況について正しく把握することで、現在のサーバ・サイドのトレンドについて理解できるとともに、結果を本ブログで公開することで他の皆様にも有用な情報になるのではないかと想定しております。締め切り後に、再利用可能な結果(順位、投票数、パーセント)として公開します。

また、上記で「組み込みコンテナ(実行可能 jar)に移行済み」と回答した方のうち、どのフレームワークへ移行したかを教えていただけないでしょうか?移行していない場合は、下記にはお答えいただかなくて結構です。

本データは、日本全体における利用状況の実データにはならないと思いますし、市場調査会社がだす結果とは異なると思いますが、それでも Java コミュニティ参加者や、本ブログをご覧いただいている皆様の近辺のデータを集めることができるのではないかと想定しております。また、昨年のデータとの比較もできるかと思います。この1年で日本の状況は変わっているのでしょうか?とても楽しみにしています。

※ これは#てらだよしお 個人的なお願い事であり、所属企業や団体からの問い合わせではないことをご理解いただければ誠に幸いです。

2017年7月5日 at 8:00 AM コメントをどうぞ

皆んな大好き Excel !! Excel REST API Java サンプルアプリケーション

2016 年 8 月初旬 Office 365 の Excel REST API が正式にリリースしました。
アナウンス:「Announcing the general availability of the Microsoft Excel API to expand the power of Office 365

上記により、Graph API と呼ばれる REST API を使用して、Office 365 の OneDrive に存在する Excel ファイルを操作できるようになります。
Excel 操作用の Graph API

※ REST API で利用できるため、プログラミング言語を問わず任意の言語で操作ができるようになっていますので、Java 以外のプログラミング言語でもどうぞお試しください。

今回、私は上記の REST API を利用して Java のサンプル・コードを作成しました。
サンプル・コード:「GitHub : Office-365-Excel-REST-API-for-Java」
またサンプル・コードがどのように動作するのかをわかりやすくするため、サンプル・アプリケーションのデモ動画も撮りましたので、どうぞ下記のデモ動画もご覧ください。

今回作成したサンプル・アプリケーションは Java EE 7 のアプリケーションとして作成しました。そこで、Java EE 準拠のアプリケーション・サーバであれば、いずれの環境でも動作します。私は、Payara Server 4.1.1.162 (GlassFish) で動作確認をしていますが、少しの変更を行うだけで、アプリケーション・サーバではなく、Servlet Container(Tomcat/Jetty) でも動かすことができます。

追記:
Office 365 を無料でお試しいただく為の設定手順 (ステップ・バイ・ステップの画面ダンプ) や Tomcat 用の設定方法に関しては 「GitHub : README.md もしくは README-4-Tomcat.md」に記載しています。

アプリケーションの実装の詳細
このサンプル・アプリケーションは Java EE 7 で実装しています。

まず、GUI (フロントエンド) のビュー・テクノロジーとして JavaServer Faces (PirmeFaces) を利用しています。しかし、フロント技術はこのサンプルでは重要でありません。慣れ親しんだフロント・テクノロジーをご利用ください。

実際の、Excel 操作の要は、com.yoshio3.restclient パッケージ配下で実装しています。
特に com.yoshio3.restclient.services サービスが重要で、Excel REST API で用意されている各種機能(REST 呼び出し)をラッピングしたメソッドを実装しています。
また、Excel REST API のリクエスト・ボディ、もしくはレスポンス・ボディに含む JSON のデータは、すべて com.yoshio3.restclient.jaxb.entities パッケージ配下のクラスにマッピングしています。例えば、Excel のワーク・シートやテーブルを取得した際に取得できる情報はすべて com.yoshio3.restclient.jaxb.entities.excel パッケージに含まれています。このマッピングした Java オブジェクトを操作することで、実際の JSON データを意識せずにプログラムができます。

また、Office 365 に接続するためには、Azure Active Directory で認証を行う必要があります。今までは、「Microsoft Azure Active Directory Authentication Library (ADAL) for Java」を利用してきました。しかし、今回 Azure AD で認証を行うために必要最低限の軽量な Servlet Filter (AzureADAuthServletFilter) を独自に実装しました。

Servlet Filter : AzureADAuthServletFilter.java
アクセス・トークン:AccessToken.java
Auth サービス: OAuth2Service.java

まだ一部実装が足りない部分(TODO)はありますが、Azure AD の認証のフローをご理解頂く上で、このサーブレット・フィルタはご参考いただけるのではないかと思います。また、Servlet Filter なので認可はできませんが、Tomcat/Jetty のような Servlet Container でも動作します。認可が必要な方は、以前作成した「Azure AD 認証・認可サンプル」をご参照ください。

Java ユーザの皆様も、Office 365 の OneDrive に存在する Excel ファイルを直接 Java から操作してみませんか?

Have fan Excel with Java !!

2016年8月31日 at 8:00 AM

Microsoft Azure IoT Hub with Java

Microsoft Azure の IoT Hub が Java でも利用できるということで試しました。Microsoft Azure の IoT Hub に関する詳細な説明はこちらをご参照ください。

Azure IoT Hub とは
IoT Hub と Event Hubs の比較

私がはまったのは1点で、「Device ID」をどうやって作るかという点でしたが、そこも下記にくわしく手順を記載します。

1. 最初に、Microsoft Azure の管理ポータルにアクセスし、新規から IoT Hub を作成します。
  Microsoft Azure の管理ポータルへアクセス

「参照 >」から「IoT Hub プレビュー」を選択します。

「新規」ボタンを押下すると、下記の画面が表示されますので「Name」に名前を入力し、利用する規模に応じて価格やプランを選択してください。

次に、リソース・グループ名を新規に作成し、ロケーションとして「東アジア」を選択し最後に「作成」ボタンを押下してください。

2. Windows 環境で DeviceExplorer をインストール
Azure IoT SDKsのサイトにアクセスし、DeviceExplorer のインストーラを入手してください。Windows 環境用に用意されている「SetupDeviceExplorer.msi」をダウンロードします (このリンクから入手できる版は 2015-11-30 版です、最新版はAzure IoT SDKsから入手してください)。

ファイルを入手後、入手したファイル(インストーラ)をクリックしてインストーラを起動してください。

次に、インストール場所や利用者を指定し「Next >」ボタンを押下します。

確認画面が表示されますので、「Next>」ボタンを押下します。

ユーザアカウント制御の確認画面が表示されますので、「はい(Y)」を押下してインストールをはじめてください。

インストールが完了すると下記の画面が表示されますので「Close」ボタンを押下してください。

インストールが完了すると Windows 10 の場合、メニューから「最新追加されたもの」の欄から実行できることを確認できます。

3. Device Explorer から Device ID と接続用文字列を作成

メニューから DeviceExplorer を起動してください。起動すると下記の画面が表示されます。

ここで、DeviceExplorer から Microsoft Azure の IoT Hub に接続し操作できるように、Azure 上で接続用の情報を確認し取得します。Microsoft Azure の管理ポータルに接続し、作成した IoT Hub のサービスを参照してください。

IoT Hub サービスを参照すると「Settings」というボタンがあるので押下します。

「Settings」ボタンを押下すると「Shared access policies」のリンクがあるので選択してください。

「Shared access policies」の POLICY から「iothubowner」を選択してください。
選択すると「Connection string—primary key」の欄があります。記載内容をクリップ・ボードへコピーできるようにコピー・ボタンが右端に用意されていますので、これをクリックしてコピーしてください。

クリップ・ボードへ文字列がコピーされると「コピー済み」と表示されます。

文字列をコピーしたのち、Device Explorer に戻り、文字列を貼り付けてください。

文字列をコピーしたのち、「Update」ボタンを押下してください。正しく設定が更新されると「Settings updated successfully」という画面が表示されます。

続いて、Device Explorer のタブから「Management」を選択し「Create」ボタンを押下してください。

ボタンを押すと、下記の画面が表示されますので、「Device ID」欄にデバイス固有の名前を入力し「Create」ボタンを押下してください。(Primary Key,Secondary Keyは自動的にキーの文字列が入力されています。)

ボタンを押下すると下記の画面が表示されますので「Done」ボタンを押下してください。

デバイス ID を作成すると一覧に1行が追加されます。ここで、追加された行をマウスで右クリックしてください。すると、選択メニューが表示されますので、「Copy connection string for selected device」を選択して接続用の文字列をコピーしてください。

コピーして作成された、接続用の文字列の例は下記のような文字列です。この文字列は後からのプログラム内で記述する必要があります。そこで、この文字列を一時的にテキストファイルなどに保管しておいてください。

HostName=HOSTNAME.azure-devices.net;DeviceId=DEVICE-ID;SharedAccessKey=Wf0o****************************************

※ 補足:Device Explorer の詳しい使い方は下記に記載されていますので、こちらもご確認ください。
How to use Device Explorer for IoT Hub devices

4. Microsoft Azure IoT Hub サンプルコードの作成

それでは、プログラムを組むための環境設定や準備が整いましたので、実際にプログラムを書いてみましょう。本サンプル・アプリケーションは、基本的にこちらに記載されている内容を実際に動作させた物です。
※ 本記事の目的は、IoT Hub の設定方法を説明するのがメインのため、コードの詳細にまでは触れず、MS 社員のどなたかが作成したコードをそのまま記載しています。しかし、この一連の設定ができると色々と面白いことができるので、まずは基本的な手順を理解してください。

Maven の pom ファイルは下記のようになります。

<?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>com.yoshio3</groupId>
    <artifactId>Azure-IoT-Hub</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven-compiler-plugin-version>2.3.2</maven-compiler-plugin-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.microsoft.azure.iothub-java-client</groupId>
            <artifactId>iothub-java-client</artifactId>
            <version>1.0.0-preview.7</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.2</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <finalName>${project.artifactId}-${project.version}</finalName>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                            </excludes>
                        </filter>
                    </filters>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.yoshio3.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Java のサンプル・ソースコードはこちらになります。

package com.yoshio3;

import com.microsoft.azure.iothub.DeviceClient;
import com.microsoft.azure.iothub.IotHubClientProtocol;
import com.microsoft.azure.iothub.Message;
import com.microsoft.azure.iothub.IotHubStatusCode;
import com.microsoft.azure.iothub.IotHubEventCallback;
import com.microsoft.azure.iothub.IotHubMessageResult;

import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Scanner;


public class Main {

    protected static class EventCallback
            implements IotHubEventCallback {

        @Override
        public void execute(IotHubStatusCode status, Object context) {
            Integer i = (Integer) context;
            System.out.println("IoT Hub responded to message " + i.toString()
                    + " with status " + status.name());
        }
    }

    protected static class MessageCallback
            implements com.microsoft.azure.iothub.MessageCallback {

        @Override
        public IotHubMessageResult execute(Message msg,
                Object context) {
            System.out.println(
                    "Received message with content: " + new String(msg.getBytes(), Message.DEFAULT_IOTHUB_MESSAGE_CHARSET));

            return IotHubMessageResult.COMPLETE;
        }
    }

    public static void main(String... args) throws IOException, URISyntaxException {
        //Device Explorer で作成してコピーした接続用の文字列をここに記載
        String connString = "HostName=HOSTNAME.azure-devices.net;DeviceId=DEVICE-ID;SharedAccessKey=Wf0o****************************************";


        IotHubClientProtocol protocol = IotHubClientProtocol.AMQPS;

        DeviceClient client = new DeviceClient(connString, protocol);

        MessageCallback messageCallback = new MessageCallback();
        client.setMessageCallback(messageCallback, null);
        client.open();

        for (int i = 0; i < 10; ++i) {
            String msgStr = "Event Message " + Integer.toString(i);
            try {
                Message msg = new Message(msgStr);
                msg.setProperty("messageCount", Integer.toString(i));
                System.out.println(msgStr);
                EventCallback eventCallback = new EventCallback();
                client.sendEventAsync(msg, eventCallback, i);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        System.out.println("Press any key to exit...");
        Scanner scanner = new Scanner(System.in);
        scanner.nextLine();

        client.close();
    }
}

念のため、Maven プロジェクトは Git Hub にもあげておきます。上記をベースに、Microsoft Azure IoT Hub Java Client 1.0.0-preview.7 API を参照しながらプログラムを作ってみてください。

5. デバイスでプログラム実行
プログラムをビルド後、下記のコマンドを IoT デバイス上で実行してください。

# java -jar Azure-IoT-Hub-1.0-SNAPSHOT.jar

実行すると、下記のようなメッセージが表示されます。

$ java -jar Azure-IoT-Hub-1.0-SNAPSHOT.jar
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
12 15, 2015 5:27:38 午後 org.apache.qpid.proton.engine.impl.ssl.SslEngineFacadeFactory getClass
警告: unable to load org.bouncycastle.openssl.PEMReader
12 15, 2015 5:27:38 午後 org.apache.qpid.proton.engine.impl.ssl.SslEngineFacadeFactory getClass
警告: unable to load org.bouncycastle.openssl.PasswordFinder
12 15, 2015 5:27:38 午後 org.apache.qpid.proton.engine.impl.ssl.SslEngineFacadeFactory
警告: unable to load bouncycastle provider
Event Message 0
Event Message 1
Event Message 2
Event Message 3
Event Message 4
Event Message 5
Event Message 6
Event Message 7
Event Message 8
Event Message 9
Press any key to exit…
IoT Hub responded to message 5 with status OK_EMPTY
IoT Hub responded to message 4 with status OK_EMPTY
IoT Hub responded to message 7 with status OK_EMPTY
IoT Hub responded to message 2 with status OK_EMPTY
IoT Hub responded to message 3 with status OK_EMPTY
IoT Hub responded to message 6 with status OK_EMPTY
IoT Hub responded to message 1 with status OK_EMPTY
IoT Hub responded to message 9 with status OK_EMPTY
IoT Hub responded to message 0 with status OK_EMPTY
IoT Hub responded to message 8 with status OK_EMPTY


参考:
Microsoft Azure IoT device SDK for Java

IoT Kit ハンズオン トレーニング 初めの一歩モノの接続からデータ分析まで by @embedded_george

最後に、今回は実戦的なアプリまでは作成しませんでしたが、上記をベースに Raspberry Pi や LEGO Mindstorms 上にプログラムを配置し、Azure 上にデータを配信したり、Azure から各種デバイスを操作したりできるようになりますね。

Let’s enjoy IoT with Java on Azure !!

2015年12月15日 at 5:24 PM 1件のコメント

Microsoft Java DevOps ハッカソン@JJUG CCC 2015


JJUG CCC 2015 Fall が2015年 11月 28日 (土) にベルサール新宿グランド(東京都新宿区西新宿8-17-3 住友不動産新宿グランドタワー) で開催されます。

今回、日本マイクロソフト株式会社は JJUG CCC にプラチナ・スポンサーとして参加し、Java の開発者と運用者による DevOps ハッカソンを2日間で実施します。このハッカソンは過去2度程実施していますが、いずれの参加者も参加してよかった他の方にもぜひお勧めしたいといわれている、とても有意義なハッカソンです(下記の参加レポートをご参照)。
みなさま、Microsoft Azure のプラットフォーム上で、 Jenkins や今はやりの Docker などを利用して 継続的インテグレーションやデリバリ(CI や CD)を体感してみませんか?今回は、JJUG との共催という事で、開発者は Java デベロッパーのみなさまが対象となります。

参加のご登録はコチラから
 ■ 開発者の方はコチラ
 ■ インフラ技術者の方はコチラ

( ※ 参加可能な人数に限りがあるため、JJUG CCC の参加登録とは別途、登録サイトをご用意しています。JJUG CCC の参加登録はコチラから行ってください。)



ご案内文
DevOps はソフトウエアデリバリのライフサイクルを早める考え方で、短期間で開発、 運用を繰り返し、一日に5 回以上新しいサービスをリリースする企業も出てくるなど、DevOps のビジネス価値、効果は昨今たいへん注目されています。      

しかし DevOps が何を指すのかは人やベンダーによって言うことがまちまちで、その多くはツールのみの話に終始していますが、ツールは DevOps の要素のひとつであり、実際は人、プロセス、さまざまな要素が関係します。      

アプリケーション開発者、そしてインフラ技術者でチームを構成し、DevOps のプラクティスを適用して、Infrastructure as Code の自動化技術を使いながら本物のDevOps が体験できるイベントを企画しました。

ぜひ奮ってご参加ください。


過去に開催した DevOps ハッカソンの参加レポートは下記にリンクしています。
● メディアの記事
http://codezine.jp/article/detail/8944
http://www.atmarkit.co.jp/ait/articles/1509/10/news168.html

● 参加者のブログ
http://heartbeats.jp/hbblog/2015/09/microsoft-devops-hackathon.html
http://couger.hatenablog.com/entry/2015/09/06/213104
http://blog.modd.com/entry/2015/09/07/151421
http://changesworlds.com/2015/09/devops-hackathon-day-2-done/
http://newscentral.exsees.com/item/2e7e6c6899c626e2baddb7cdeaaed62d-d28352a527a1d995287ddd23891859aa

参加のご登録はコチラから
 ■ 開発者の方はコチラ
 ■ インフラ技術者の方はコチラ

2015年11月6日 at 2:48 PM

Time to move on…

ついに、この日がやってきました。本日がオラクルにおける Java エバンジェリスト活動の最終日になりました。Sun からオラクルと、継続してご指導ご支援頂きました皆様、そして全国の Java コミュニティの皆様に、心から厚く御礼を申し上げます。

今後、引き続き Java コミュニティの皆様と交流を持たせていただくのは、日本オラクルの伊藤 敬さんです。
Twitter : @itakash

2001年 8月にSun Microsystems に中途入社し、早いもので14年の月日が流れました。外資系企業という出入りが多い環境の中、自身これだけよく長く続いたと思っています。Sun 時代に GlassFish という製品にめぐり会い、プリセールス兼 Java エバンジェリストとしてエバンジェリスト活動を開始しました。当時は関東を中心とした活動だったため、Sun 時代の私をご存知ない方も多いのではないかと思います。

日本全国のJavaの開発者の皆様と交流を持つようになったのは、2010年のオラクル統合後です。このオラクルでの5年間を振り返ると、今までの人生の中で最も充実し、成長させてくれた5年間だったのではないかと感じています。

活動当初は、会社の統合前後からの Java に対する情報不足、さらに最新版がしばらくリリースされていなかったこと等から、多くの開発者の皆様が Java の将来に対し不安を持っていた時期でした。この時は、皆様の前に立って話するのがとても怖かったことを、今でも昨日のことのように覚えています。当時、「Java は大丈夫です、これからも続けて進化していきます!!」といったメッセージをお届けしましたが、この言葉に「本当だろうか?!」と疑問を持たれる方もいらっしゃたのではないかと思います。

あれから5年が経過し、今ではあえて「Java は大丈夫です!!」といったメッセージを出さなくても、オラクルが Java を大切にし、オラクルの元で Java が着実に進化していることを、そして未来があることを誰しもがご理解いただいているのではないかと思います。実際オラクルになって、Java SE 7, Java EE 7, Java SE 8 をリリースし、今後も Java SE 9, Java EE 8 のリリースが予定されています。今後も Java は皆様のニーズに応え、新機能をどんどんと組みこんでいき Java Platform はさらに素晴らしい物になっていくでしょう。

私が活動を行ってきた上で、何よりも幸運だったのは、Sun 時代から Java を愛してやまない諸先輩方や数多くの友人に支えていただいたことでした。そして、日本全国の Java 開発者の皆様と親交を深めることができた事も何より幸せでした。

今日にいたるまで、私の活動を全面的に支えてくださったのは、まぎれもなく日本全国の Java コミュニティの皆様です。

JavaOne Tokyo 2012 でTwitterのハッシュタグ「#てらだよしおがんばれ」が生まれ、夜の懇親会で参加者の皆様から「胴上げ」までしていただいたことは一生忘れる事ができません。おそらく、胴上げまでしていただいたエバンジェリストは日本でも私が初めてなのではないでしょうか?

こうした事が、その後の活動にどれだけ勇気づけてくれたか計り知れません。そして、皆様のご支援がなければ今日までやってこれませんでした。

今年の Java Day Tokyo 2015 で Java の 20 周年を皆様と一緒に祝うことができ、とても幸せでした。ご参加いただいた皆様、ご登壇者の皆様、関係者の皆様、すべての皆様に心より感謝しています。

Java の 20 周年イベントを終え、そしてオラクルでの生活も5年 (Sun から14年) を終え、私にとって節目となる今年、新たな道、そして新たなチャレンジしたいと考えたことを、どうぞご理解頂けないでしょうか。

決して、会社や Java に対してネガティブな感情を持っての決断ではないことを、ご理解頂けないでしょうか。たとえ私が退職しても今後もオラクルは引き続き Java を大切にしますし、Java に対して投資を行っていきます。どうぞ、今後もJava の事を変わらずご支援いただき、安心してご利用頂けますよう宜しくお願いします。

最後に、
来週月曜日から新しい会社で働きます。新しい会社名や理由は入社後改めてご報告しますが、とても楽しみにしています。私の新しいチャレンジに対し、引き止めて頂きつつも、最後に理解を示してくださった上司に対して、今ここで改めて心より感謝の気持ちを述べたいと思います。そして、最後に温かく送り出していただいたオラクルの同僚・友人にも改めて感謝したいと思います。

私のエンジニア人生は、ずっと Java と共にありましたし、私を育ててくれたのも Java です。会社が変わっても私は Java のファンでいつづけたいと思います。そして今後は皆様と共に、外の世界から Java を応援し何らかの形で関わりたいと思います。

Sun Microsystems から Oracle まで、
お世話になったすべての皆様、本当にありがとうございました。
I Love Java.
Yoshio Terada
Oracle Java Evangelist.








2015/07/11 更新分

Twitter で頂いたメッセージ一覧(Togetter)
 #てらだよしお 退職エントリのまとめ

FaceBook で頂いたメッセージへのリンク1

FaceBook で頂いたメッセージへのリンク2

Twitter の Tweet メッセージ

2015年7月10日 at 1:00 PM 1件のコメント

JavaOne 2014 基調講演レポート

Java の将来にとって Java コミュニティは重要
(※ 文言、内容等修正をする可能性があります。)

●「Java とコミュニティ」
2014 年 9 月 28 日、JavaOne San Francisco 2014 ストラテジー・キーノートを皮切りにはじまりました。

今年の JavaOne は昨年よりも来場者が増加し、モスコーンセンターに世界中から非常に多くの Java 開発者が集まりました。基調講演を取りまとめたのは昨年に引き続き Java Product Management Vice President の  Peter Utzschneider で今年の JavaOne のテーマ “CREATE THE FUTURE” (未来を創る) を発表しました。

Peter は冒頭で、JavaOne は開発者による開発者のためのイベントとして位置づけ、このイベントは、Java コミュニティからのフィードバックを受けて、昨年以上により良いイベントにするために様々な趣向を取り入れ実際に実現していると説明しました。

例えば、社外の方々も含むコンテンツ選定委員の絶え間ない努力のおかげで、500 以上のセッションを選定しラインナップしています。

また今や JavaOne には必要不可欠となった毎年恒例のイベントとなった Geek Bike Ride も JavaOne 開催に先駆け、土曜日に開催されました。この Geek Bike Ride は世界中の開発者とよりよい交流を持つ事ができる貴重なイベントですので、今年参加できなかった方も是非来年に参加してくださいと Peter 自らが話をしていました。また、展示会場においても様々なイベントやショーケース、参加型のイベントなども用意している事を紹介しました。


さらに、今年のテーマは“CREATE THE FUTURE” (未来を創る) ですが、まさに将来を担うのは子供であり、今の子供達が将来 Java の開発者になるため、子供達に対するプログラミング教育の重要性を説き、JavaOne に先駆け子供向けのイベントを開催しました。元々は Devoxx というヨーロッパに存在する Java コミュニティが立ち上げた自らの子供達に Java を教えるイベントでしたが、その取り組みが世界的に評価され今や世界各国で Devoxx4kids というイベントが開催されています。JavaOne 前日に開催された Devoxx4Kids に実際に参加された子供達が壇上に招かれ、実際にイベントで取り組んだ内容を紹介しました。


また、Peter は Java の将来を創っていく上で欠かせないのは Java コミュニティの力で、Java の開発者に Java のコミュニティに参加する事の重要性を紹介し、実際に行われてきたコミュニティの活発な活動例や創造性、情熱などを紹介しました。一つ目はドイツの例でドイツに存在する 22 の JUG が共同でイベントを開催し2日間のイベントを成功におさまた事や、ロンドンの Java コミュニティでは Java SE 8 のLambda 式を勉強するための新しいツールを作成中で、もうすぐリリースされる事を紹介した他、Java のユーザ・グループとしてはロンドン、ブラジルに続き3つめとなりますが、モロッコの Java コミュニティがJCP のメンバーに参加した事も発表しました。

また、JCP に関連した内容として JCP は今年で生誕 15 周年を迎える記念の年で、Java の継続的な成長と成功のために標準化が重要である事、そして継続して技術革新をおこなうために開発者自らが標準化に対する積極的の重要性を伝えました。JCP の生誕 15 周年を祝うイベントも JavaOne 期間中に開催することも述べました。

今、世界規模で驚くほど Java のコミュニティが新規に立ち上げられており、昨年の
JavaOne から1年間で 80 以上のコミュニティが作られていることを紹介しました。
Peter はオラクルにとって Java コミュニティはとても重要で、コミュニティに対する投資は継続し、開発者との交流を大切にし、コミュニティを通じて次の Java を作りたい、Java の開発者と新たな関係を構築したいと語りました。

●「Java SE の現状と今後」
Peter は引き続き Java SE を紹介するために、Java Platform Development の
Vice President である Georges Saab を壇上に招きました。

Java SE 8 は世界中のコミュニティから長い間期待されていた機能が含まれており、
正式リリース後、様々なメディアで取り上げられ、統合開発環境もいち早く
対応し素晴らしい反応を得ている事を紹介しました。また中でもリリース以降
すでに、8 カ国語で 80 以上の Java 8 に関連した書籍が出版されている事をあげ、
OpenJDK や JCP における透明性の開発の結果、いち早く情報が得られる事、
そしてコミュニティ・メンバーの多大なる努力のおかげと伝えました。

Java SE 8 は近代的なプログラミング手法(関数型プログラミングやコレクションに対する一括処理など)を取り入れ、それ以外にも JavaFX, JavaScript エンジン、サブセットを提供するプロファイル等も取り入れたため、かつてない程の Java に対する変更が加わっているものである事を紹介しました。

また、パフォーマンスに関しても様々な箇所で大幅に改善しているため、Java SE 7 に比べ 40 % のパフォーマンス改善が見込まれ、運用面においても大きな利点が得られる点を言及しました。さらに、Java にとってセキュリティは非常に需要であるため、継続的に四半期に一度セキュリティのアップデートを提供することを紹介した他、

また、エンタープライズ領域で Java を使用する場合に、 Mission Control,
Advanced Management Console といった機能、さらにはサポート契約に
ついても紹介しました。

最後に、今後のロードマップとして Java SE 8 のアップデート予定、さらには
次期 Java SE 9 のリリース計画についても紹介し、Java SE 8 の利用を
呼びかけ、Java SE 9 もアーリ・アクセス版を試してフィードバックを提供して
欲しいこと伝え壇上をさりました。

●「Java Embedded の適用領域の拡大」

Java Embedded 1年間の急速な普及

ー 1年間で 50万ダウンロード
ー 20 以上のデバイスへのポーティング
ー 業界全体でのコラボレーション
ー オンライン学習サイトへ 83カ国 2400 以上の登録

Peter は引き続き、Java Embedded 関連の紹介を始めました。Embedded の領域で Java ME の CDC は Java SE のコンパクト・プロファイルに置き換えられ、組み込みの分野においても標準の Java SE の API の殆どが共通的に使えるようになっておりツール等も共通で使える事を紹介しました。そして Java SE との差分はデバイスに対するアクセスのような限定的な物となっていることを紹介し、今では Java の開発者は、組み込みのデバイスからデスクトップ、さらにはサーバ・サイドのアプリケーション開発まで同じ文法で同じライブラリを使用することができるようになっており同じ Java のスキルで開発者の幅が広がっている点について紹介しました。
Java SE Embedded 8 では Compact Profile で Mission Control, Flight Recorder 等が利用できる点を紹介し 8 月にリリースした Java SE Embedded Update 6 ではパフォーマンス改善などもおこなっている点を紹介しました。

また、新しく Java Embedded に関する新しいプロダクトのリリースも発表しました。

Java ME Embedded 8.1 EA リリース
基調講演であらたに、Java ME Embedded 8.1 のアーリ・アクセスをリリースした事を発表しました。
Oracle Java ME Embedded 8.1 Early Access Downloads

これは、ARM Cortex M3/M4 マイクロコントローラや、mbed を含む Freescale FRDM k64 ボードのサポートなどが含まれます。

Java とモバイルに置けるイノベーション
ー Oracle Mobile Application Framework
ー Java Card
ー RoboVM
ー Java for Trusted Execution Environment

Java はモバイル分野でも大幅な進歩をしていますが、Oracle の Mobile Application Framework はクロス・プラットフォーム・アプリケーションの開発が可能になっています。

Peter は IoT Device のアーキテクトである Jasper Potts と Richard Bair を壇上に招き入れ、Java Embedded で作成した車の制御アプリケーションのデモを行いました。これは車を模したボードで、車のペダルを踏むと速度表示パネルに速度がリアルタイムで表示され、タッチデバイスに表示される地図に位置情報を示し、地図をタッチしてを操作したりできるようになっています。さらには温度の測定、光度の測定など、各種センサーからの情報をリアルタイムに取得し、それらの情報をもとに車を制御したり、クラウド上にデータを送信したりする事ができるようになっています。
サーバ・サイドは Java EE 7 のアプリケーション・サーバを使用し、車とサーバ間は WebSocket の通信を行っています。これら全てが Java で実装されており、次世代の車でできる一部を参加者はみることができました。


●「活気のある Java EE」

続いて、Peter は Cloud Application Foundation の Senior Vice President である
Cameron Purdy を会場に招き入れ、Java EE の説明を Cameron に譲りました。

Java EE 6 に準拠するアプリケーション・サーバは 20 超え、Java EE 7 準拠のサーバも各社が積極的に対応をすすめています。また、Java コミュニティからも Adopt-A-JSR プログラムを通じて将来の Java EE の為に、積極的な貢献を頂いています。さらに開発環境においても著名な統合開発環境におけるJava EE 7 のサポートを提供し開発生産性が大幅向上する他、高品質なアプリケーションを作成するために、Hudson, Maven, Arquillian 等を使用する事ができます。

また、GlassFish に関しても商用サポートの打ち切りは行いましたが、Java EE の参照実装の基礎として GlassFish に対しては継続して投資を行っています。

また、最近次のバージョンである Java EE 8 に関する JSR が JSR-366 として JCP に登録され、最初の投票が行われましたが、Java EE 8 に関する投票は満場一致で承認されました。
Java EE 8 に含まれる機能は、世界中の Java EE の開発にアンケートを実施し、必要とする機能に関してフィードバックを頂いた後に検討した結果を踏まえた内容となっています。

Java EE 8 に含まれる機能例
ー JSON Binding
ー Java Message Service 2.1
ー Servlet 4.0
ー Model View Controller
など

Java EE 8 の議論はまだ始まったばかりですが、Java EE 8 は 2016 年の秋リリースの予定で現在進行しています。
最後に Cameron は Java コミュニティの参加社に Adopt-A-JSR というJavaコミュニティが将来の Java を創るために貢献できるプロジェクトをご紹介し参加を呼びかけました。

●「Duke Choice Award & Java EE コミュニティ・パーティ」
基調講演と同日「Duke Choice Award」の授賞式や、Java EE コミュニティの
パーティ等がありました。Duke Choice Award は今年で 13 年目という事もあり
13組の受賞者が発表されています。また、授賞式の後は、世界中の Java EE のコミュニティメンバーがあつまるパーティもあり、多くの日本人が海外のエンジニア達と交流をもっていました。

[Duke Choice Award]





[Java EE Community Party]


●「まとめ」
今年の JavaOne 基調講演では、最新の Java 情報に精通する開発者にとっては既知の内容が多く含まれていましたが、それは JCP の改革によるものです。Java の開発は現在全てオープンな場でディスカッションが行われ、プロセスを進めています。その為事前に得られる情報が多くなっているのも事実です。
一方で、この Java の透明性によって、開発者はいち早く事前に情報を収集する事が可能なため、今のような製品がリリースされた直後から大量の書籍や情報を入手できるようになっています。
JavaOne には1週間で 500 以上のセッションが存在し、Java に関する様々な情報を入手できます。また、Java の仕様を決める方や世界のエキスパートと直接意見交換ができる貴重な場ですので、そういった国際交流を持つ事も JavaOne の一つの楽しみ方かと思います。

Let’s Enjoy JavaOne !!

PS.
最後に、Peter が話をしていましたが来年の JavaOne は Java 生誕 20 周年の記念の年となります。来年の JavaOne はさらに色々な趣向をこらした内容を用意する予定ですので、来年もぜひご参加ください!!と申しておりました。

2014年9月30日 at 8:01 PM

leJOS + NetBeans 8.0 (Maven) + Java SE Embedded (7 or 8) で LEGO Mindstorms EV3のアプリケーション開発

今日は Java の開発者の皆様に、LEGO Mindstorms EV3 の制御を Java で行うために、環境構築から NetBeans を使用した Java のアプリケーションの開発方法までをご紹介します。LEGO 社は、幅広い年代の子供達に向けて LEGO ブロックを提供しています。最近では私の2歳になる子供も LEGO duplo という幼児向けのレゴで遊んでいます。

今日、ご紹介する「教育版レゴ マインドストームEV3」 は、LEGO Mindstorms を教育目的で使うために開発された製品で、これを使用するとブロックでロボットを作成した後、Java でそのロボットを制御する事もできるようになります。今回、Java でロボット制御を試すために、「教育版レゴ マインドストームEV3 / LEGO Mindstorms Eduation EV3 」の日本の正規代理店である(株)アフレル様のご協力を得て、LEGO Mindstorm を1台お借りし、実際に教育版レゴ マインドストームEV3 用の Java アプリケーションを書いてみました。

● アプリケーションの動作イメージ:

今回、作成した LEGO Mindstorms EV3 のサンプル・アプリケーションのソースコードは GitHub にアップしていますので、ご興味のある方はどうぞご覧ください。
https://github.com/yoshioterada/Java-Sample-app-for-LEGO-Mindstorms

本エントリでは、上記のサンプル・アプリケーションの実装に対する詳細の説明ではなく、Java でプログラムを書く事ができるように環境構築から最初のプログラム作成の部分までをご紹介します。

事前準備:

(1) レゴマインドストーム EV3 の入手

LEGO Mindstorms は 教育版と玩具版があり含まれる内容が異なります。
参考:教育版と玩具版の比較 (アフレル)

教育版
「教育版レゴ マインドストームEV3」の入手 (本エントリではこちらを使用)
販売先情報 :アフレル(株)


玩具版: Amazon 等から
レゴ マインドストーム EV3 31313(¥51,000)
レゴ マインドストーム EV3 31313 LEGO Mindstorms EV3 並行輸入品(¥ 44,320)
LEGO Mindstorms EV3 31313($349.95)

玩具版の レゴも Amazon で $350 〜 ¥51,000と少々高価な商品ですが、対象年齢は 10 歳以上のれっきとした LEGO です。機能的にこれは本当に子供向けなのか?!と思う程、自分でロボットを組み立てたり、そのロボットを制御するプログラムを書けたりと、子供よりも大人が熱中しそうな商品です。今回のエントリは玩具版でもご参考いただけるかと思います。

(2) USB WiFi アダプタの入手

USB の WiFi アダプタは EV3 に標準で付属していませんがあった方がとても便利です。開発時、開発環境から EV3 へネットワークを通じてアプリケーションをデプロイしたり、リモートから EV3 を制御したい場合、WiFi アダプタが必要です。今回、(株)アフレル様のご好意で「Roland Wireless USB Adapter WNA1100-RL」も借りる事ができたため、私はこの WiFi アダプタを使用します。Amazon から WNA1100-RL を購入していただく事も可能です。

その他、EV3 では下記の WiFi の USB アダプタが動作確認されています。特に EDIMAX EW-7811Un は EV3 からあまり突出しないのでオススメです。
動作確認済みの WiFi アダプタ

(3) leJOS 0.8.1 beta の入手


leJOS は LEGO Mindstorms EV3 のファームウェアを変更した OS で、この環境上で Java SE 7 Embedded 7 が稼働し、Java のアプリケーションを動かす事ができるようになります。
leJOS EV3 0.8.1 beta release より leJOS_EV3_0.8.1-beta.tar.gz を入手してください。

(4) Oracle Java SE Embedded の入手

Java for LEGO® Mindstorms® EV3 のサイト(オリジナルJRE入手先)から、Oracle Java SE Embedded を入手してください。
Java SE Embedded 7 の場合:
● ejre-7u55-fcs-b13-linux-arm-sflt-headless-17_mar_2014.tar.gz

Java SE Embedded 8 のインストール方法は、本エントリの最後に記載しています。

(5) 開発環境用 (Mac/Linux/Windows環境) に統合開発環境、Java SE をインストール

デスクトップの開発環境に NetBeans 8 と Java SE 7 をインストールしてください。(今回は各インストール方法の詳細は割愛)

NetBeans の入手はこちらから
Java SE 7 の入手はこちらから

leJOS 環境構築から開発までの手順

LEGO Mindstorms EV3 で Java アプリケーションを動作させるためには、下記の手順に従って行います。


  1. ブート可能なマイクロ SD カードへ leJOS のインストール
  2. ブート可能なマイクロ SD カードから起動
  3. leJOS で WiFi 設定
  4. ローカル Maven レポジトリに必要ライブラリをインストール
  5. Maven プロジェクトの作成
  6. アプリケーションの開発
  7. アプリケーションのビルド/デプロイ
  8. アプリケーションの実行

(0)ブート可能なマイクロ SD カードを作成

ブート可能で FAT 32 でフォーマットしたマイクロ SD カードを作成してください。Mac OS/X の場合、「アプリケーション」→「ユーティリティ」→「ディスクユーティリティ」を実行して作成できます。「パーティションのレイアウト」から「1パーティション」を選択し、「パーティション情報」に「名前」を記入してください。

次に「オプション…」ボタンを押下してください、すると下記のウィンドウが表示されます。ここで、「マスター・ブート・レコード」にチェックされている事を確認し「OK」ボタンを押下してください。

最後に「適用」ボタンを押下してください、押下すると下記の画面が表示されます。ここで「パーティション」ボタンを押下してください。

(1) SD カードへファイルのコピーと展開 (Mac/Linux/Windows 環境で実施)

事前準備の (3) でダウンロードした leJOS_EV3_0.8.1-beta.tar.gz を展開してください。

> tar xvf leJOS_EV3_0.8.1-beta.tar.gz
> ls

COPYING README.md bin lejosimage.zip lib samples.zip sd500.zip

展開すると lejosimage.zip が存在しますので、このファイルと JRE7 を SD にコピーしてください。ファイルをコピーした後、SD カード内で lejosimage.zip を展開してください (※ JRE の展開は不要です)。

> cp ejre-7u55-fcs-b13-linux-arm-sflt-headless-17_mar_2014.tar.gz lejosimage.zip /Volumes/LEGO-PART/
> cd /Volumes/LEGO-PART/
> unzip lejosimage.zip

Archive: lejosimage.zip
creating: lejos/
creating: lejos/bin/
inflating: lejos/bin/partition.sh
inflating: lejos/bin/partfuncs.sh
inflating: lejos/bin/install.sh
inflating: lejos/bin/funcs.sh
inflating: lejos/bin/spinner.sh
inflating: lejos/bin/check.sh
creating: lejos/images/
inflating: lejos/images/lejoslogo.ev3i
inflating: lejosimage.bz2
inflating: uImage
inflating: uImageStandard
extracting: version

# 展開した後の SD カードのディレクトリ構成
# ls -F
ejre-7u55-fcs-b13-linux-arm-sflt-headless-17_mar_2014.tar.gz*
lejos/
lejosimage.bz2*
lejosimage.zip*
uImage*
uImageStandard*
version*

以上で準備は完了です。マイクロ SD カードをアンマウントして、システムから取り出してください。

取り出した後、EV3 にマイクロ SD カードを挿入してください。またその際、WiFi の USB アダプタも USB ポートに挿入してください。

(2)ブート可能なマイクロ SD カードから起動(EV3 で実施)

LEGO MindStorm に SD カードが挿入されている事を確認し、EV3 のボタンを押して起動してください。すると自動的に Linux 環境の構築(ファイルシステム構築等も含む)やJava 環境の構築を実施します。 (作業終了まで:約 8 分)

内部的には下記の処理等が行われています。
1. Resize FAT32 fs
2. Resize Complete
3. Create Linux fs
4. Expand Image
5. Prepare Install
6. Deleting old files
7. Expand Image
8. Start Install
9. Installing rootfs
10. Installing modules
11. Installing leJOS
12. Configure network
13. Install links
14. Install lib jna
15. Copy config files
16. Install jre
17. Extracting jre
18. Optimize java
19. Remove temp files
20. Installing kernel
21. Sync disks
22. Unmount disks
23. Rebooting

EV 3 はインストールや設定が完了すると自動的に再起動します。正常に起動が完了すると大きなブザー音が鳴った後、leJOS のメニュー画面が表示されます。


(3) leJOS で WiFi 設定(EV3 で実施)

WiFi の設定は、WiFi の設定マークを選択して行います。選択すると接続可能なアクセス・ポイントの一覧が表示されます。

自身の適切なアクセス・ポイントを選択してください。選択すると下記の画面が出てきます。

ここで、アクセス・ポイントに接続するため WEP のパスワードを入力します。基本的にはキーボード配列と同様にローマ字が並んでいますので、適切なパスワード文字を入力してください。ここで画面の一番最下行に特別な命令用の文字 (U,l,x,D) が記載されています、それぞれの意味は下記の通りです。大文字のローマ字を入力したい場合は、U を押す等してパスワードを正しく入力してください。

U : 大文字に変換 (Upper)
l : 小文字に変換 (lower)
x : 1文字消去
D : 設定終了 (Done)

パスワードを正しく入力した後、D を押下すると WiFi での接続ができるようになります。EV3 のメニュー画面で、IP アドレス: 10.0.1.1 と記載された行の下側に、割り当てられた IP アドレス(ここでは 192.168.1.100)が記載されていますので、この IP アドレスで EV 3 に接続できるようになります。EV3 に接続できるようになっているかどうかを確認するために、TELNET でログインをして確認してください。

> telnet 192.168.1.100
Trying 192.168.1.100…
Connected to 192.168.1.100.
Escape character is ‘^]’.

_____ _ _ ___
| _ |_ _ _| |___| | __|
| _| | | . | . | | _|
|__|__|___|___|___|_|_|

Rudolf 2011.01 EV3

login: root
root@EV3:~#

正常に、WiFi の設定ができている場合、上記のようなログイン・プロンプトが表示されます。ここで login: 名に root を、パスワードは未入力(ノンパスワード)でエンター・キーを押下してください。すると EV3 にログインができるようになります。

(4) ローカル Maven レポジトリに必要ライブラリをインストール (Mac/Linux/Windows 環境で実施)

今回、統合開発環境には NetBeans を使用し、Maven プロジェクトとしてアプリケーション開発を行います。EV3 を制御する Java アプリケーション開発を行うためには、ev3classes.jar と dbusjava.jar が必要ですが、現在 leJOS 用の Maven レポジトリが存在していないようです。そこで、これら2つのファイルをローカルの Maven レポジトリにインストールしてください。2つのファイルは leJOS_EV3_0.8.1-beta.tar.gz を展開したディレクトリ内に含まれています。

> cd leJOS_EV3_0.8.1-beta/lib/ev3
> ls

dbusjava-src.zip dbusjava.jar ev3classes-src.zip ev3classes.jar

次に、2つのファイルを mvn コマンドでローカル・レポジトリにインストールします。下記の 2 つのコマンドを実行してください。仮に mvn コマンドが自身の実行パス内に見つからない場合は、NetBeans 付属のmvn コマンドをご利用ください。

例:Mac OS/X (Linux) の場合 mvn はデフォルトで下記に存在します。
“/Applications/NetBeans/NetBeans 8.0.app/Contents/Resources/NetBeans/java/maven/bin/mvn”

> mvn install:install-file -Dfile=ev3classes.jar -DgroupId=ev3.classes -DartifactId=ev3classes -Dversion=0.8.1 -Dpackaging=jar
[INFO] Scanning for projects…
[INFO]
[INFO] ————————————————————————
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ————————————————————————
[INFO]
[INFO] — maven-install-plugin:2.3.1:install-file (default-cli) @ standalone-pom —
[INFO] Installing /Users/USER_NAME/Downloads/leJOS_EV3_0.8.1-beta/lib/ev3/ev3classes.jar to /Users/USER_NAME/.m2/repository/ev3/classes/ev3classes/0.8.1/ev3classes-0.8.1.jar
[INFO] Installing /var/folders/5x/qqvk50_50xl7jvfhyf9_tdd40000gn/T/mvninstall6910985062740456417.pom to /Users/USER_NAME/.m2/repository/ev3/classes/ev3classes/0.8.1/ev3classes-0.8.1.pom
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 0.623s
[INFO] Finished at: Tue Apr 22 20:22:57 WIT 2014
[INFO] Final Memory: 5M/245M
[INFO] ————————————————————————

> mvn install:install-file -Dfile=dbusjava.jar -DgroupId=ev3.dbus -DartifactId=dbusjava -Dversion=0.8.1 -Dpackaging=jar
[INFO] Scanning for projects…
[INFO]
[INFO] ————————————————————————
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ————————————————————————
[INFO]
[INFO] — maven-install-plugin:2.3.1:install-file (default-cli) @ standalone-pom —
[INFO] Installing /Users/USER_NAME/Downloads/leJOS_EV3_0.8.1-beta/lib/ev3/dbusjava.jar to /Users/USER_NAME/.m2/repository/ev3/dbus/dbusjava/0.8.1/dbusjava-0.8.1.jar
[INFO] Installing /var/folders/5x/qqvk50_50xl7jvfhyf9_tdd40000gn/T/mvninstall6420442918254641308.pom to /Users/USER_NAME/.m2/repository/ev3/dbus/dbusjava/0.8.1/dbusjava-0.8.1.pom
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 0.597s
[INFO] Finished at: Tue Apr 22 20:25:04 WIT 2014
[INFO] Final Memory: 6M/310M
[INFO] ————————————————————————

例:Windows の場合 mvn はデフォルトで下記に存在します。
 C:\Program Files\NetBeans 8.0\java\maven\bin

Windows で mvn コマンドをターミナルから実行するために、下記2つの環境変数の設定を行ってください。
● JAVA_HOME を新規追加 : JDK をインストールした場所
● PATH へ追加 : maven コマンドへのパスの追加

上記、環境変数の設定を行った後、lib\ev3 ディレクトリに移動し下記のコマンドを実行してください。※ 大文字、小文字の打ち間違いにご注意ください。

C:\Users\USER_NAME\Desktop\leJOS_EV3_0.8.1-beta_win32\lib\ev3 > mvn install:install-file -Dfile=dbusjava.jar -DgroupId=ev3.dbus -DartifactId=dbusjava -Dversion=0.8.1 -Dpackaging=jar
[INFO] Scanning for projects…
[INFO]
[INFO] ————————————————————————
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ————————————————————————
[INFO]
[INFO] — maven-install-plugin:2.3.1:install-file (default-cli) @ standalone-po
m —
[INFO] Installing C:\Users\USER_NAME\Desktop\leJOS_EV3_0.8.1-beta_win32\lib\ev3\db
usjava.jar to C:\Users\USER_NAME\.m2\repository\ev3\dbus\dbusjava.8.1\dbusjava-0
.8.1.jar
[INFO] Installing C:\Users\USER_NAME\AppData\Local\Temp\mvninstall1908329777283214
622.pom to C:\Users\USER_NAME\.m2\repository\ev3\dbus\dbusjava.8.1\dbusjava-0.8.
1.pom
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 0.760s
[INFO] Finished at: Thu Apr 24 19:29:44 JST 2014
[INFO] Final Memory: 5M/155M
[INFO] ————————————————————————
C:\Users\USER_NAME\Desktop\leJOS_EV3_0.8.1-beta_win32\lib\ev3> mvn install:install-
file -Dfile=ev3classes.jar -DgroupId=ev3.classes -DartifactId=ev3classes -Dversion=0.8.1 -Dpackaging=jar

[INFO] Scanning for projects…
[INFO]
[INFO] ————————————————————————
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ————————————————————————
[INFO]
[INFO] — maven-install-plugin:2.3.1:install-file (default-cli) @ standalone-po
m —
[INFO] Installing C:\Users\USER_NAME\Desktop\leJOS_EV3_0.8.1-beta_win32\lib\ev3\ev
3classes.jar to C:\Users\USER_NAME\.m2\repository\ev3\classes\ev3classes.8.1\ev3
classes-0.8.1.jar
[INFO] Installing C:\Users\USER_NAME\AppData\Local\Temp\mvninstall2687157046215461
183.pom to C:\Users\USER_NAME\.m2\repository\ev3\classes\ev3classes.8.1\ev3class
es-0.8.1.pom
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 0.712s
[INFO] Finished at: Thu Apr 24 19:31:49 JST 2014
[INFO] Final Memory: 5M/158M
[INFO] ————————————————————————

(5) Maven プロジェクトの作成 (Mac/Linux/Windows 環境で実施)

NetBeans のメニューからプロジェクトを作成してください。まず、「ファイル(F)」→「新規プロジェクト(W)…」を選択してください。

選択すると下記の「新規プロジェクト」作成用のウィンドウが表示されます。ここで、「カテゴリ (C) :」から「Maven」を選択し、「プロジェクト (P) :」から「Javaアプリケーション」を選択し「次へ」ボタンを押下してください。

ボタンを押下すると下記の「新規 Java アプリケーション」ウィンドウが表示されます。ここで「プロジェクト名 (N) :」、「プロジェクトの場所 (L) :」、「グループ ID (G) :」、「バージョン (V) :」、「パッケージ (P) :」に適切な値を入力した後、最後に「終了 (F)」ボタンを押下してください。

プロジェクトが正常に作成されるとプロジェクト・タブに下記のようなプロジェクトが作成されます。

プロジェクトを作成した後、pom.xml ファイルに下記を記載してください。

<?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>com.yoshio3</groupId>
    <artifactId>LEGOMind</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <build>
        <extensions>
            <extension>
                <groupId>org.apache.maven.wagon</groupId>
                <artifactId>wagon-ssh</artifactId>
                <version>1.0</version>
            </extension>
        </extensions>
        <plugins>
            <!--- MANIFEST ファイルを作成するプラグイン -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.yoshio3.legomind.EV3AppMain</mainClass>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>/home/root/lejos/lib/ev3classes.jar /home/root/lejos/libjna/usr/share/java/jna.jar</Class-Path>
                        </manifestEntries> 
                    </archive>
                </configuration>
            </plugin>
            <!--- デスクトップからネット経由で jar ファイルをコピーするためのプラグイン -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>wagon-maven-plugin</artifactId>
                <version>1.0-beta-5</version>
                <executions>
                    <execution>
                        <id>upload-jar</id>
                        <phase>package</phase>
                        <goals>
                            <goal>upload</goal>
                        </goals>
                        <configuration>
                            <!-- ~/.m2/settings.xml ファイルに記述したログインID、パスワードの参照 --> 
                            <serverId>ev3-root</serverId>
                            <!-- EV3 に割り当てられている IP アドレス --> 
                            <url>scp://192.168.1.100/</url>  
                            <fromDir>${project.basedir}/target</fromDir>  
                            <includes>*.jar</includes>  
                            <excludes>*-sources.jar</excludes>
                            <!-- EV3 のコピー先ディレクトリ --> 
                            <toDir>/home/lejos/programs</toDir>  
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>    

    <!-- ローカル・レポジトリにインストールしたファイルへの参照
    mvn install:install-file 
        -Dfile=ev3classes.jar 
        -DgroupId=ev3.classes 
        -DartifactId=ev3classes 
        -Dversion=0.8.1 -Dpackaging=jar
    -->
    <dependencies>
        <dependency>
            <groupId>ev3.classes</groupId>
            <artifactId>ev3classes</artifactId>
            <version>0.8.1</version>
        </dependency>
        
    <!-- ローカル・レポジトリにインストールしたファイルへの参照
    mvn install:install-file 
        -Dfile=dbusjava.jar 
        -DgroupId=ev3.dbus 
        -DartifactId=dbusjava 
        -Dversion=0.8.1
        -Dpackaging=jar
    -->
        <dependency>
            <groupId>ev3.dbus</groupId>
            <artifactId>dbusjava</artifactId>
            <version>0.8.1</version>
        </dependency>
    </dependencies>
</project>

また、Maven の設定ファイル ( ~/.m2/settings.xml (Windows では C:\Users\USER_NAME\.m2)) に下記を記載してください。

<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">
    <servers>
        <server>  
            <id>ev3-root</id>  
            <!---- EV3 の root ログイン ID -->
            <username>root</username>  
            <!---- EV3 の root ログイン パスワード -->
            <password>password</password>
        </server>
    </servers>
</settings>

※ ご注意
pom.xml ファイルを設定、保存後に wagon のライブラリが存在しないため、下記のようにプロジェクトが「ロード不可能」と表示されます。

この場合、プロジェクトを右クリックし、「プロジェクトの問題を解決…」を選択してください(Maven のセントラルレポジトリよりライブラリを入手)。

選択すると下記のウィンドウが表示されます。ここで「解決 (R) …」ボタンを押下してください。

(6) アプリケーションの開発(Mac/Linux/Windows 環境で実施)

Maven プロジェクトを作成したので実際にプログラムを初めてみましょう。今回は上記 pom.xml の MANIFEST ファイルの定義 <manifest> の <mainClass> タグ内でメイン・クラスとしてcom.yoshio3.legomind.EV3AppMain を定義しましたので、このクラスを作成します。また、初めての LEGO Mindstorms のアプリケーション開発ということで、やはり Hello World から初めてみましょう。プロジェクトの中に含まれる「com.yoshio3.legomind」パッケージを右クリックし「新規」→「Java クラス …」を選択してください。

選択すると下記のウィンドウが表示されます。ここで「クラス名 (N) :」に「EV3AppMain」と入力し「終了 (F)」ボタンを押下してください。

クラスを作成すると下記の画面が表示されます。

ここで、「EV3AppMain」クラスに対して、EV 3 のパネルに文字列を表示させ、3 秒程緑色の LED を点滅させるプログラムを下記のように記載します。

package com.yoshio3.legomind;

import lejos.hardware.Button;
import lejos.hardware.lcd.LCD;
import lejos.utility.Delay;

/**
 *
 * @author Yoshio Terada
 */
public class EV3AppMain {

    public static void main(String... argv) {
        //パネルに文字列を表示
        LCD.drawString("Hello World", 0, 0);
        //緑の点滅ボタンを3秒間光らせる(有効値: 0 - 9)
        Button.LEDPattern(4);
        Delay.msDelay(3000);
    }
}

(7) アプリケーションのビルド/デプロイ(Mac/Linux/Windows 環境で実施)

コードを実装した後、プロジェクトをビルドしてください。プロジェクト・タブから「LEGOMind-Sample」プロジェクトを右クリックし「ビルド」を選択してください。

ビルドを行うと下記のメッセージが表示され、org.codehaus.mojo の wagon-maven-plugin を通じて、WiFi のネットワーク経由で自動的に /home/lejos/programs ディレクトリ配下に LEGOMind-1.0-SNAPSHOT.jar ファイルが配備されます。

cd /Users/USER_NAME/NetBeansProjects/LEGOMind; JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home "/Applications/NetBeans/NetBeans 8.0.app/Contents/Resources/NetBeans/java/maven/bin/mvn" install
Scanning for projects...
------------------------------------------------------------------------
Building LEGOMind 1.0-SNAPSHOT
------------------------------------------------------------------------
--- maven-resources-plugin:2.5:resources (default-resources) @ LEGOMind ---
[debug] execute contextualize
Using 'UTF-8' encoding to copy filtered resources.
skip non existing resourceDirectory /Users/USER_NAME/NetBeansProjects/LEGOMind/src/main/resources
--- maven-compiler-plugin:2.3.2:compile (default-compile) @ LEGOMind ---
Nothing to compile - all classes are up to date
--- maven-resources-plugin:2.5:testResources (default-testResources) @ LEGOMind ---
[debug] execute contextualize
Using 'UTF-8' encoding to copy filtered resources.
skip non existing resourceDirectory /Users/USER_NAME/NetBeansProjects/LEGOMind/src/test/resources
--- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ LEGOMind ---
No sources to compile
--- maven-surefire-plugin:2.10:test (default-test) @ LEGOMind ---
Surefire report directory: /Users/USER_NAME/NetBeansProjects/LEGOMind/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
--- maven-jar-plugin:2.4:jar (default-jar) @ LEGOMind ---
Building jar: /Users/USER_NAME/NetBeansProjects/LEGOMind/target/LEGOMind-1.0-SNAPSHOT.jar
--- wagon-maven-plugin:1.0-beta-5:upload (upload-jar) @ LEGOMind ---
Uploading /Users/USER_NAME/NetBeansProjects/LEGOMind/target/LEGOMind-1.0-SNAPSHOT.jar to scp://192.168.1.100///home/lejos/programs/LEGOMind-1.0-SNAPSHOT.jar ...
--- maven-install-plugin:2.3.1:install (default-install) @ LEGOMind ---
Installing /Users/USER_NAME/NetBeansProjects/LEGOMind/target/LEGOMind-1.0-SNAPSHOT.jar to /Users/USER_NAME/.m2/repository/com/yoshio3/LEGOMind/1.0-SNAPSHOT/LEGOMind-1.0-SNAPSHOT.jar
Installing /Users/USER_NAME/NetBeansProjects/LEGOMind/pom.xml to /Users/USER_NAME/.m2/repository/com/yoshio3/LEGOMind/1.0-SNAPSHOT/LEGOMind-1.0-SNAPSHOT.pom
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 4.837s
Finished at: Tue Apr 22 21:09:27 WIT 2014
Final Memory: 11M/312M
------------------------------------------------------------------------

8. アプリケーションの実行(EV3 で実施)

leJOS のメニュー画面より Programs (/home/lejos/programs ディレクトリ)を選択してください。

選択するとデプロイされているファイル一覧が表示されますので、LEGOMind-1.0-SNAPSHOT.jar を選択してください。

選択すると下記の画面が表示されます。そのままエンター・キー(真ん中のボタン)を押下してください。


押下すると下記の Duke が手を振っている画面 (しばらくお待ちください) が表示されます。アプリケーションをロードするまで数秒かかりますのでそのままお待ちください。

アプリケーションがロードされると下記のように実行され、メニューに「Hello World」が表示され、ボタンの LED が緑色に点滅する事を確認できます。

9. LEGO を組み立てて、超音波センサー、タッチ・センサー、モータ(車輪)を取り付けます。

上記で、Java を使って LEGO Mindstorms を制御できる事がわかりました。後は EV3 に LEGO のパーツを組み立てて、超音波センサーやタッチ・センサー、モータ(車輪)などを取り付けて自分オリジナルのロボットを組み立ててみてください。

その後で、下記 GitHub にアップロードしているコード例をご参照いただき実装すると、センサーから受け取った情報を元に EV3 を制御できるようになります。

GitHub にアップしたサンプルは、タッチセンサーに何かがぶつかると車輪が逆方向に回転し、超音波センサーに物を近づけると車輪の回転スピードが遅くなります。最後に EV3 の何らかのボタンを押すとアプリケーションを終了します。
https://github.com/yoshioterada/Java-Sample-app-for-LEGO-Mindstorms

今回私の上記実装では、車輪毎にリスナーを登録しセンサーからの情報に応じて車輪を制御する方法で実装しましたが、leJOS で提供されているサンプルを確認すると、様々な方法で実装ができるようです。是非色々お試しください。

また、調べていてちょっとおもしろかったのが、上記のようにデプロイしなくても、デスクトップの Java アプリケーションからWiFi 経由 (RMI) でリモートのEV3 を制御する事ができるので、これと JavaFX や WebSocket と組み合わせて応用すればスマートフォンや他のデバイスからリアルタイムに EV3 を制御できるようになるのではないかと想定します。

package com.yoshio3.legomind;

import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;
import lejos.remote.ev3.RMIRegulatedMotor;
import lejos.remote.ev3.RMISampleProvider;
import lejos.remote.ev3.RemoteEV3;
import lejos.robotics.RegulatedMotor;
import lejos.robotics.RegulatedMotorListener;

/**
 *
 * @author Yoshio Terada
 */
public class RemoteOperation {

    public static void main(String... argv) {
        RemoteEV3 ev3;
        try {
            ev3 = new RemoteEV3("192.168.1.100");
            RMISampleProvider sampleProv = ev3.createSampleProvider("S1", "lejos.hardware.sensor.EV3TouchSensor", "sensor");

            // 車輪の制御 
            RMIRegulatedMotor right = ev3.createRegulatedMotor("B", 'L');
            RMIRegulatedMotor left = ev3.createRegulatedMotor("C", 'L');
            right.resetTachoCount();
            left.resetTachoCount();

            ExecutorService execSvc = Executors.newFixedThreadPool(3);
            execSvc.submit(new RunMotor(right));
            execSvc.submit(new RunMotor(left));

            Future<Float> res = execSvc.submit(new MonitoringTouch(sampleProv));
            if (res.get() == 1.0f) {
                right.stop(true);
                left.stop(true);
            }
        } catch (RemoteException | MalformedURLException | NotBoundException | InterruptedException | ExecutionException ex) {
            Logger.getLogger(RemoteOperation.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

class RunMotor implements Runnable {

    RMIRegulatedMotor motor;

    RunMotor(RMIRegulatedMotor motor) {
        this.motor = motor;
    }

    @Override
    public void run() {
        try {
            motor.setSpeed(400);
            motor.rotate(360 * 20);
            motor.close();
        } catch (RemoteException ex) {
            Logger.getLogger(RunMotor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
...

最後に

leJOS のオリジナルのサイトでは Eclipse でプラグインをインストールし ant を用いて開発する方法が紹介されていました。Eclipse ユーザの方はオリジナル・サイトをご参照いただければ幸いです。一応、私も Eclipse で試しましたが、上記オリジナルサイトの記載内容に従い設定を行う事で Eclipse で開発からデプロイまで行う事ができる所までは確認しました。

普段、私は NetBeans を使用しているため、今回 NetBeans で同様に開発ができないか?!と考え、上記環境設定を行いました。一旦、上記 1 〜 4 までの設定を行うと、以降の開発は 5 〜 8 までを繰り返し行うだけで NetBeans でも簡単に開発ができるようになります。また Eclipse と同様に、ビルドを行った時点で自動的に WiFi 経由でデプロイができるようになるためとても便利です。

どうぞ、Java で LEGO Mindstorms をお楽しみください。

PS.
Java SE 8 のローンチ・イベントで発表された Java SE Embedded で LEGO Mindstorms の説明資料も参考として紹介します。

また、Java Champion の Adam Bien もRun Java 7u40 Embedded on Lego Mindstormsのエントリで leJOS を使用した LEGO Mindstorms の制御のデモも公開していますので併せてご紹介します。

追記メモ2.
Java SE Embedded 8 を使う場合の手順。

1. Oracle Java SE Embedded version 8 の DownLoad

Oracle Java SE Embedded version 8のダウンロード

上記のページ内に下記の記述があります。
Java SE Embedded 8 enables developers to create customized JREs using the JRECreate tool. Starting with Java SE Embedded 8, individual JRE downloads for embedded platforms are no longer provided. To get started, download the bundle below and follow instructions to create a JRE that suits your application’s needs.

これは、Java SE Embedded 8 以降では、Java SE 7 のように個別の JRE を提供しないため、自分専用の JRE を、JRECreate ツールを使って作成する必要がある事が書かれています。

2. Create a Custom JRE with jrecreate

jrecreate コマンドを使用してカスタムの JRE を作成してください。

※ jrecreate コマンドの引数の詳細は下記をご参照ください。
jrecreate Options

上記、説明内容に従って、カスタムの JRE を作成してください。

> tar xvfz ejdk-8-fcs-b132-linux-arm-sflt-03_mar_2014.tar.gz
> cd ejdk1.8.0/
> ls
bin lib linux_arm_sflt
> cd bin
> ./jrecreate.sh -vm all -d /tmp/ejre1.8.0
Options {
ejdk-home: /Users/USER_NAME/Downloads/ejdk1.8.0
dest: /tmp/ejre1.8.0
target: linux_arm_sflt
vm: all
runtime: jre
debug: false
keep-debug-info: false
no-compression: false
dry-run: false
verbose: false
extension: []
}
を使用してJREを作成しています

ターゲットJREサイズは45,523 KBです(ディスクの使用量はこれより多いことがあります)。
埋込みJREが正常に作成されました
> cd /tmp/
> ls
ejre1.8.0
> tar cvf ejre1.8.0.tar ejre1.8.0
a ejre1.8.0
a ejre1.8.0/bin
a ejre1.8.0/bom
a ejre1.8.0/lib
a ejre1.8.0/release
a ejre1.8.0/lib/arm
a ejre1.8.0/lib/calendars.properties
a ejre1.8.0/lib/classlist
a ejre1.8.0/lib/content-types.properties
a ejre1.8.0/lib/currency.data
a ejre1.8.0/lib/ext
a ejre1.8.0/lib/hijrah-config-umalqura.properties
a ejre1.8.0/lib/jce.jar
a ejre1.8.0/lib/jsse.jar
a ejre1.8.0/lib/logging.properties
a ejre1.8.0/lib/meta-index
a ejre1.8.0/lib/net.properties
a ejre1.8.0/lib/resources.jar
a ejre1.8.0/lib/rt.jar
a ejre1.8.0/lib/security
a ejre1.8.0/lib/tzdb.dat
a ejre1.8.0/lib/security/blacklist
a ejre1.8.0/lib/security/cacerts
a ejre1.8.0/lib/security/java.policy
a ejre1.8.0/lib/security/java.security
a ejre1.8.0/lib/security/local_policy.jar
a ejre1.8.0/lib/security/trusted.libraries
a ejre1.8.0/lib/security/US_export_policy.jar
a ejre1.8.0/lib/ext/meta-index
a ejre1.8.0/lib/ext/sunjce_provider.jar
a ejre1.8.0/lib/arm/client
a ejre1.8.0/lib/arm/jli
a ejre1.8.0/lib/arm/jvm.cfg
a ejre1.8.0/lib/arm/libjava.so
a ejre1.8.0/lib/arm/libjsig.so
a ejre1.8.0/lib/arm/libnet.so
a ejre1.8.0/lib/arm/libnio.so
a ejre1.8.0/lib/arm/libverify.so
a ejre1.8.0/lib/arm/libzip.so
a ejre1.8.0/lib/arm/minimal
a ejre1.8.0/lib/arm/minimal/libjsig.so
a ejre1.8.0/lib/arm/minimal/libjvm.so
a ejre1.8.0/lib/arm/minimal/Xusage.txt
a ejre1.8.0/lib/arm/jli/libjli.so
a ejre1.8.0/lib/arm/client/libjsig.so
a ejre1.8.0/lib/arm/client/libjvm.so
a ejre1.8.0/lib/arm/client/Xusage.txt
a ejre1.8.0/bin/java
a ejre1.8.0/bin/keytool
a ejre1.8.0/bin/rmid
a ejre1.8.0/bin/rmiregistry
> gzip -c ejre1.8.0.tar > ejre1.8.0.tar.gz
> cp ejre1.8.0.tar.gz /Volumes/LEGO-PART/
> cp lejosimage.zip /Volumes/LEGO-PART/
> cd /Volumes/LEGO-PART/
> unzip lejosimage.zip
Archive: lejosimage.zip
creating: lejos/
creating: lejos/bin/
inflating: lejos/bin/partition.sh
inflating: lejos/bin/partfuncs.sh
inflating: lejos/bin/install.sh
inflating: lejos/bin/funcs.sh
inflating: lejos/bin/spinner.sh
inflating: lejos/bin/check.sh
creating: lejos/images/
inflating: lejos/images/lejoslogo.ev3i
inflating: lejosimage.bz2
inflating: uImage
inflating: uImageStandard
extracting: version

SD カードにファイルをコピーして展開した後、SD ディスクをアンマウントしてください。後は、上記 (2)ブート可能なマイクロ SD カードから起動(EV3 で実施)と同様に、作成した SD から EV3 を起動して(2)以降の処理を行ってください。
上記で、Java SE Embedded 8 で制御できるようになります。

Java SE 8 Embedded のコードを実装するためには、Maven の pom.xml の下記の行 (コンパイラのソース、ターゲット) をそれぞれ 1.7 → 1.8 に修正して実装してください。

  
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

備考:本来であれば、LEGO Mindstorms は Java SE Embedded 8 の “Compact Profile 2” で動作するようなのですが、現在 Compact Profile 2 で JRE を作成した場合は現時点で動作しません。本件は、leJOS のチームと Oracle の Embedded チームが現在調査中です。
上記は現時点(2014年4月28日時点)でのワークアラウンドとしてご利用ください。

2014年4月23日 at 6:05 PM 13件のコメント

過去の投稿


Java Champion & Evangelist

ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

カレンダー

2017年7月
« 4月    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カテゴリー

Twitter

clustermap

ブログ統計情報

  • 977,418 hits

Feeds