ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2013年3月16日土曜日

G*ワークショップZ Mar 2013 に参加してきた #jggug

みけです。

昨日確定申告の書類を中野税務署に提出したら、

ちょうど中野税務署の門が閉じたところでした。

ギリギリセーフ。


そのあと行って来ました。


G*ワークショップZ Mar 2013 Gradleハンズオン


内容はgithubにあるので、そちらを参考にどうぞ。

https://github.com/nobusue/GradleHandson


あとツイッターの実況中継はまとめられています。

2013/03/15(#jggug)G*ワークショップZ Mar 2013

最近はまとめ職人が洗練されてきていますねw


で、おまいは何をやってたんだ?


何も特にしていないです。

とりあえず、gradleにhelloWorkタスク作って

「hello work」というビルドスクリプト作りました。


毛虫本




Gradle Effective Implementation Guide

この本、翻訳やりたいです。

一ヶ月でやるので、どなたか出版社の人を紹介してくだされ~。



おわり

2013年3月4日月曜日

IntelliJ IDEAでmethodを変更する

みけです。

今朝起きたときは心臓がバクバクなってて、

「やばい、オレ、うつだしのう」と思いました。(結果、生きている)



メソッドを変更したいんですけど…





というわけで、大人しくRefactorを使いましょう。


変更前のコードです。







メニューからRefactor → Change Signature... を選ぶか、

⌘ + F6を押します。





ダイアログが出るので、追加したい引数だとか、修正したい引数を編集します。








Refactorボタンを押せば、自動的にメソッドとそのメソッドを使用している部分が変更されます。






おしまい

2013年3月2日土曜日

try-with-resourcesのアレをIntelliJ IDEAで…

みけです。

先週は鯛委員一週間ということで、

体調は絶悪でした。



IntelliJ IDEAユーザーでいまさらtry-with-resourcesを組めない人なんていないと思うけど…


一応やり方書いておくお。

赤いエラーが出ています。





AutoClosableインターフェースの実装クラスのコンストラクタを呼び出しているところで⌥ + Enterする。





surrond with try-with-resources blockを選ぶ。





try(...)で囲まれたけど、まだ赤いエラーが出たままなので、

もう一度⌥ + Enterする。





Add catch close(s)を選ぶ。





エラー全部消す。





catchが多いとアレなんで、

また⌥ + Enterして、





Collapse catch closesを選んで、まとめる。





できあがり。

2013年2月26日火曜日

IntelliJ IDEAでinterfaceの実装クラスに移動する

今日(2013/02/26)の18時までに13時間眠っていたミケです。

IntelliJ IDEAの記事を書きます。

eclipseガチ勢な人は読まないで下さい。

それとeclipseガチ勢なのに、むかついて僕に批判を投げてくる人も読まないで下さい。

しかもeclipseは無料で同じことできるんだよとか、

さも自分は社会一般に貢献してるアピールとか絡めて

批判するような輩ははやくこのタブ閉じて下さい。


今、僕に必要なのは、ガチ勢が求めるような

何が速いとか、何が正しいとか、何が真実かとかいう

ガチ勢のための心の安定剤ではなく、

僕のための自信です。


デバッグでインターフェースにたどり着いてしまったんだけど…


デバッグなどをしていて、

メソッドコールを辿って行ったらインターフェースにたどり着いて\(^o^)/オワタとなる人は多いのではないでしょうか?

eclipseではそのような人のために、

コマンドがあるようです。

Eclipseで例えば↓のようなInterfaceをimplement


一方、その頃IntelliJ IDEAでは…


とりあえず、インターフェースにたどり着いてしまいました。




(実はabstract classでしたが…)


クラスの宣言の横に緑色の下向きの矢印のついたアイコンがあります。

それをクリックすると…





実装クラスの一覧が表示されます。

そのうちの一つを選択します。





実装クラスに移動出来ます。





かなり楽です。

2013年2月21日木曜日

今更Java7のmulti-catchとか… #Java6ネガティブキャンペーン

退院間近のみけです。

気分は落ち込みつつあります。(2週間ごとに波があって、今は下り坂)



Java7のmulti catchとか






まあ、Java7が発表されてから1年以上も経っているので、

今更Java7のmulti catchをIDEでどうすんのか悩んでいる人など

いるわけもないと思いますが…

(普通のIDEはもうJava8まで対応しているので、
今苦労するのはJava8の方だと思っています。)


IntelliJ IDEAはJava6のシンタックスで書いていたコードを

すぐ簡単にJava7っぽく出来ます。


とりあえず、Exceptionとか無視して書いたコード…





とりあえず、try()の部分をどうにかしましょう。

try()のところの赤線の範囲にカーソルを当てて、

⌥ + Enterを押します。





おもむろにAdd Catch Clause(S)を選択します。





なんんか、まだ赤いエラーが残っていますね。

最初の部分をどうにかしちゃいましょう。

factory.createXML…の部分にカーソルをあてて、

また⌥ + Enterを押します。





やっぱり、Add Catch Clause(S)を選択します。





なんか、catchのあたりがドドメ色(どんな色???)になっています。

僕は、IntelliJ IDEAの設定でエラーっぽい箇所をこういう色になるように設定しているから、

こんな色になっていますが、多分何も設定をいじっていない人は、

黄色の波線かなんかが表示されると思います。

(デフォルトはとっくに忘れた)


気持ち悪いのでなんとかしましょう。

catchのあたりにカーソルを合わせて、

またまた⌥ + Enterを押します。





ひとつしか選択肢がないので、あとはわかるな(ry。

Collapse 'catch' blocksを選択します。





あとは良い感じに握りつぶしましょう(ダメ)。





そうそう、メソッドにthrowsをつけるのも、

だいたいおんなじです。

⌥ + Enterやりたいことの順番です。




簡単ですね。


まあ、簡単ですが、eclipseに慣れている人はeclipseの、

netbeansに慣れている人はnetbeansの固有の方法でやればいいと思います。


2013年2月17日日曜日

JavaのAST標準について

みけです。

最近はPluggable Annotation Processor APIにハマっています。

ただ、ここで一つの課題に直面しています。

このエントリーでは、僕が今直面していて、どうしてもやっつけたい課題について書いて行きたいと思っています。


JavaのASTの標準仕様?


これは僕が不勉強なのもあるのですが、

JavaでASTを操作する場合の標準AST(Abstract Syntax Tree)のモデルがないような気がします。

もちろん、package com.sun.toolsにはASTの実装がありますし、

Pluggable Annotation Processor APIをいじっているとInterfaceベースでASTを扱うので、

ないとは言えないのですが、

AST解析用にあるだけっぽくて、ASTからクラスファイル生成の標準がないような感じがします。


ASTモデルにあっては、javaファイルをパースしてASTモデルを生成する方向のAST利用シーンと、

自らASTモデルを生成してjavaファイルを生成するという二つの利用目的があるように思います。


Eclipse JDT


一応Eclipse JDTを簡単に調べてみましたが、

Eclなんとかを使用することが大前提のため、

宗教的な理由により却下。


好みは


僕はGroovyっ子なので、GroovyASTTransformationで使われている

package org.codehause.groovy.ast のモデルを使うのが比較的好きです。

このパッケージは非常に洗練されていて、

僕は一日程度で覚えることができました。


だからこのASTモデルを元にして、

javaファイルジェネレーションを実行できたらいいなと思う反面、

このpackage自体を取り出すのが面倒なので、

さて、困った…という状況にあります。


ASTモデル形成後の話


ASTモデルでクラスを組成できたとしても、

それを実際のjavaファイルに出力するには別途出力するエンジンが必要になるかと思っています。

その辺りについてはGroovyのコードをまだ追っていないので、

よくわかっていません。

まあ、結局のところ、勉強不足という事ですね。


Groovy依存を取り除く


また、Javaの標準的なASTの仕組みが欲しいので、

Groovy依存を無くしたいと思っている次第です。

なので、希望としてはJavaのAST標準がJSRあたりで提起されないかな〜

なんて思っています。


考えてもしかたがないので


ありうる形でASTモデルとjavaファイルジェネレーションを分離しつつ、

標準っぽいのを作って行きたいなーと思っています。

で、思っているだけだと

『[発声練習] 「何がわからないか」がわからないをそのままにしておかない技術モドキ』

こういう感じで突っ込まれそうなので、

githubあたりでコードを公開しつつ、

やろうかなと思っているんですが、

イマイチ抽象的な分野なので、

成果がなかなか現れない(´・ω・`)

@SupressWarnings("serialVersionUID")
public class Hoge implements java.io.Serializable {}

この程度でいいので生成できるASTとコードジェネレーションから作っていければいいかな

なんて思います。


2013年2月7日木曜日

Pluggable Annotation Processor API で遊んでみる

みけです。

ここのところPluggable Annotation Processor APIで遊んでいます。

とはいえ、僕はすごい遅筆といか、遅プログラムなので、

大して進んでいませんが…


AbstractProcessor で取得できるものをリバース・エンジニアリングしてみる


まず、引数とかにどういうものがあるかを

println で調べてみました。

コードは最後の方に掲載しておきます。


AnnotationProcessorでソースコードの解析を行うときに、

一番最初のとっかかりになるのが、

RoundEnvironment#getElementsWithAnnotatedWith(Class<? extends Annotation>)

ではないでしょうか。


このメソッドの戻り値Set<? extends Element>で取得されるElementは、

対象のアノテーションが付与された要素です。


そのアノテーションが付与されたElementに対して以下のコマンドを実行すると、

これらの要素が得られます。

  • asType()
    • javax.lang.model.type.TypeMirror
    • アノテーションが付与された変数、メソッドの戻り値、クラスなどの型(toString()すればQuarifiedNameが取れます。)
  • getSimpleName()
    • javax.lang.model.element.Name
    • アノテーションが付与された変数、メソッドの戻り値、クラスなどの名前
  • getModifiers()
    • java.util.Set<javax.lang.model.element.Modifier>
    • アノテーションが付与された変数、メソッドの戻り値、クラスなどのアクセス修飾子
  • getKind()
    • javax.lang.model.element.ElementKind
    • アノテーションが付与されたものが変数、メソッドの戻り値、クラスなどのどれであるか
  • getEnclosingElement()
    • javax.lang.model.element.Element
    • アノテーションが付与された変数、メソッドの戻り値、クラスなどの所属先(変数やメソッドであればクラス、クラスであればパッケージ)
  • getEnclosingElements()
    • java.util.Set<javax.lang.model.element.Element>
    • アノテーションが付与されたメソッドの引数や戻り値、クラスに所属するフィールドやメソッド
  • getAnnotationMirrors()
    • java.util.Set<javax.lang.model.element.AnnotationMirror>
    • アノテーションが付与された変数、メソッド、クラスに付与されているすべてのアノテーション


以下、解析するために使ったサンプルコード。(JSR-330をベースにしています)


2013年2月4日月曜日

json-pull-parserをIntelliJ IDEAに適用するためのbuild.gradle

こんばんわ。

みけです。

女医さんがかわいいんですよ。

次回の問診の時には、もっとアプローチしようと思います。

青春だなぁ…

annotation processorの設定


まあ、別にIntelliJ IDEAでannotation processorの設定をするのは、

面倒ではないので、アレですが…

gradlerたるもの、なんでもgradleでできないと、嫌なんです。


というわけで、vvakame氏json-pull-parser

IntelliJ IDEAでも使えるように

build.gradleを記述しました。





ただ、これ結構やっつけで作っているので、

まだ、コンパイルを通すのにいろいろと付け加えなければいけません。

まあ、とりあえず、今日はここまでということで。

明日も女医さんに逢いたいなー!!!!

(2013/02/05 5:39 追記)

修正して、IntelliJ IDEAでもGradleでもビルドできるようにしました。

Pluggable Annotation Processor APIはコンパイルパスに加えておけば、

後の処理は良い感じにやってくれます。

ただ、IntelliJにて生成したコードをGradleコンパイル時に残しておくと、

コンパイルエラーが発生するので、

(IntelliJで生成したソースファイルと
コンパイル時に生成したソースファイルが
同じものなのでコンフリクトする)

コンパイル前にIntelliJで生成した方のコードを

削除するようにしてあります。

一応、IntelliJ IDEAでコード生成する方法


eclなんとかと違って、

ファイル保存操作のないIntelliJですが、

コードを生成する場合は、

明示的にコンパイルするという操作が必要になります。




Gradleでビルドするときの注意


特にないです。




終わり

p.s. vvakame氏〜Java1.7にも対応してくだされ〜〜

2013年1月26日土曜日

IntelliJ IDEAでNamedQueryの定義に移動する

こんにちは。入院中のみけです。

JPAをいろいろと適当に触っています。

NamedQueryの定義に移動する


DaoクラスやRepositoryクラスなどで、

NamedQueryを使う場面があると思います。

その際に、パラメーターのキーを参照したいとか、

どこで定義されているかすぐ見つけられないとか、

そんな状況があると思います。


そんな時はorm.xmlで一括管理

クエリー名にカーソルを当てた状態で、

  • Windowsの場合 : Ctrl + B
  • Macの場合 : ⌘ + B

を押します。


すると、NamedQueryを定義しているアノテーションにすぐにアクセスできます。



2013年1月24日木曜日

今更JPAにはまってみる

こんにちは。

入院中のみけです。

入院中に作業療法というのがあって、

そちらへの参加が求められていますが、

プログラミングのほうが楽しいので、

ずっとプログラム書いています。

(大半はぼーっとしていますけど)


今更JPAにハマってみる


というわけで、JPA + Hibernate的なDB周りの

プログラムの勉強を今更やっているわけですが、

昨日ハマったあたりを中心にブログに残しておこうと思います。


プログラムの構成


こんな感じ。


persistence.xmlにHibernateを使うよという設定を書いて、

JPQLはorm.xmlに書いてあります。

persistence.xmlorm.xmlは次のような感じ。

persistence.xml




orm.xml




orm.xmlを参照しているプログラムはこんな感じ。



JPAのnamedQueryというのを使って、参照しています。


なお、モデルとなっているクラスは次。




ハマったのは


さて、これをpersistence-unittestにして、

次のようなテストを実行します。





するとこんなエラーが発生します。




おい、namedQueryが間違っているよと怒られます。


というわけで、該当箇所のソースコードを読んでいたのですが、

どうもScannerというのが@Entityアノテーションを付与された

クラスをスキャンしているっぽいのですが、

なんか、そういうことをしているっぽいコードが見当たらない(´・ω・`)


困ったらStack Overflow先生


というわけで、ググったら答えっぽいのがありました。

[PersistenceUnit: ]: unable to build EntityManagerFactory


これの2つ目の回答で、

<class>classname</class>のクラスネームをちゃんと書いているのかよ!と

しつこく確認しています。

で、僕がハマっていたのはそれっぽい。


<class>classname</class>を追加してあげたら、

普通にテスト通りました。


おそらく初歩的なミスなんでしょうね(´・ω・`)

2012年12月31日月曜日

gradlebについて

今年(2012年)最後のエントリーになります。

みけです。

Gradleをいつも推していますが、

build.gradleがいつも同じ事ばっかり書いている気がしたので、

gradle builder 略して、gradlebを書いてみました。

aliasにalias gradleb = 'groovy /path/to/gradleb.groovy'

設定しておいて、下のように叩くと、プロジェクト構造とbuild.gradleが生成されます。

$ gradleb  -g org.mikeneck.gradleb.sample -j 1.7 -p sample-web -v 0.1 -a jetty,groovy,idea -d groovy/org.codehaus.groovy:groovy-all:2.0.5,compile/org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.2.Final,compile/org.springframework:spring-core:3.1.2.RELEASE,testCompile/junit:junit:4.11

apply plugin : 'java'
apply plugin : 'jetty'
apply plugin : 'groovy'
apply plugin : 'idea'

group = 'org.mikeneck.gradleb.sample'
version = '0.1'
sourceCompatibility = '1.7'
targetCompatibility = '1.7'

repositories {
    mavenCentral ()
}
dependencies {
    groovy 'org.codehaus.groovy:groovy-all:2.0.5'
    compile 'org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.2.Final'
    compile 'org.springframework:spring-core:3.1.2.RELEASE'
    testCompile 'junit:junit:4.11'
}

スクリプトなので、荒削りな部分はありますが、

簡単にビルドスクリプトが書けます。



2012年12月29日土曜日

IntelliJ IDEAでプログラミングしよう - 初級編

こんばんわ。

みけです。


最近、「IntelliJ IDEAを購入したけど、全然使っていない」という

もったいないことをされている方が多いので、

IntelliJ IDEAの使い方講座を書こうと思います。

なお、対象バージョンはIntelliJ IDEA 12です。


インストール


IntelliJ IDEAのダウンロードページからダウンロードします。


Windowsの場合はインストール用のexeファイルが、

Macの場合はディスクマウントイメージがダウンロードされるので、

それぞれ開きます。


Windowsの場合はインストールディレクトリを入力して、

あとは良きにはからえという感じでインストールしてくれます。

僕はWindowsマシンには「C:¥IntelliJ」というディレクトリーに、

バージョンごとにディレクトリーを作成して、

そこにインストールしています。

例えば、12.0.1の場合は、

「C:¥IntelliJ¥12.0.1」というディレクトリーにインストールしています。


Macの場合は、ディスクをマウントして、

アプリケーションディレクトリーにドラッグ・アンド・ドロップするだけです。




初回起動時


初回起動時にはライセンスの入力を求められます。




個人でご購入された方は一番上のEnter License Dataというところに入力します。

入力する内容ですが、

みなさんのメールにJetBrainsから次のようなメールが届いていると思います。




こちらのメールを開き、次のような箇所を探します。




ここに記載されたUser NameとLicense Keyを先ほどの

ライセンス入力画面に入力します。

これで晴れて正式なIntelliJ ユーザーになれました。

おめでとうございます∩(・ω・)∩バンジャーイ


Hello Worldを作る


ではさっそくハローワークじゃなかった、Hello Worldを作りましょう。

Quick Startというところから、「Create New Project」を選択します。




つぎにアプリケーションの情報を入力します。






  • 作成するアプリケーションのタイプを選択します。
    • ここでは「Java Module」を選択します。
  • プロジェクト名を設定します。
    • ここでは「start-idea」とします。
  • ファイルツリーをどこにするか設定します。2.に合わせて自動修正されます。
    • ここはデフォルトのままにします。
  • Javaのバージョンを指定します。
    • ここでは「1.7」にします。
  • プロジェクトファイルの形式を選択します。
    • ここでは「.ipr (File based)」にします。
  • ソースディレクトリを自動で作成するか決めます。
    • ここでは自動で作成することにして、そのディレクトリーをGradleのデフォルトっぽく「src/main/java」にします。


そして、Nextをクリックすると次のような画面が表示されます。

利用するモジュールとそのバージョン・詳細などを決定できます。




ここではGroovyを使いたいのをぐっと我慢して、Finishをクリックします。

これでプロジェクトの作成完了です。




プログラムを書く


左側の説明

では画面の簡単な紹介です。

まず、左側にはファイルツリーが表示されます。



ここでは、主にファイルの操作を行います。

  • クラスの作成・削除
  • パッケージの作成・削除
  • ディレクトリの作成・削除
  • ファイルの作成・削除


パッケージを作る

さっそくパッケージを作りたいと思います。

ソースディレクトリの「src/main/java」を選択した状態で、


  • Windows : alt + Insrt
  • Mac : ctrl + n


を入力し、出てきたメニューから「package」を選択します。




ダイアログが出るのでパッケージ名を入力します。




そうするとパッケージが出来上がります。




クラスを作る

では次にクラスを作ります。

先ほど作ったパッケージにカーソルがある状態で、


  • Windows : alt + Insrt→Enter
  • Mac : ctrl + n→Enter


を入力します。

するとクラス名を入力するダイアログが出てきます。




クラス名を入力して、「Enter」を入力すれば、

クラスが出来上がります。




簡単に出来ますね。

多分クラスを作成する手順は某eというIDEよりも

少ないはずです。


エディター部分

まあ、これについてはとかく説明することはないですね…

エディター部分です。

好きに書いて下さい。





というわけで、public static void main (String... args)

と入力してきましょう。


で、puと入力すると…




いきなり補完が出てくれます。

これ、すごい便利です。

某eというIDEだとctrl + spaceを押さないとやってくれませんからね…

最近、某nというIDEはIntelliJのこの機能を取り込んでいるみたいですね。




では、引き続きSystemと入力します。




アウッ




プ…




とにかく、するするっという感じで補完されていきます。


無駄にctrl + spaceを入力する必要などありません。


よく、某eは気分が爽快になると言われていますが(※)、
(※要引用元)

多分、ctrl + spaceを無駄に叩いて

「ッターン」している自分に酔っているだけじゃないかな

と思います。


あの「ッターン」はやっている人は気分爽快かもしれませんが、

周囲にいる人にはすごい迷惑なんですよね。

耳障りというか…

自分は爽快だけど、他人に不快な思いをさせるIDEって

どうなのかな…
(使う人のアレによる)


で、特に静かなオフィスでみんながあれをやっていると、

オフィスがスゴイ不機嫌な感じになるんですね。

みんながイライラしているっぽくって、

周囲に流されやすい僕もなんだか不機嫌になってしまいます。


さて、話が横にそれましたね。

もとに戻して、あとは「Hello, World!」と入力するだけです。




プログラムを実行する


実行するときのコマンドは次のとおりです。

  • Windows : alt + shift + F10
  • Mac : alt(option) + shift + F10




下の部分の説明




まあ、ほとんどアイコンで何が何を意味しているかわかると思うので、

説明は必要無いですかね。

  • 再実行したい場合は左上の矢印アイコンを押します。
  • 実行途中で終了する場合は左中の四角アイコンを押します。
  • …あとはあまり使ったことないっす


と、まあとりあえず、普通の使い方について説明してきました。

次回(あるかどうかは不明)はもう少し進んだ使い方を説明したいと思います。