Chonaso's Commentary

InternetやIT技術などについて知ったこと、試したこと、考えたことを書いていきます。

AngularJS & Jerseyでファイルアップロード&JSONでパラメータ連携

Jerseyでのファイルアップロードって、よく見かけるサンプルではファイルもパラメータもmultipart/form-dataで一緒くたにされてしまいますが、実際にはパラメータ内に配列やオブジェクトが含まれていることが多いので、やっぱりいつも通りJSON経由で一撃でバインドしたいですよね。

続きを読む

今年買ったガジェット振り返り

昔からガジェット好きを公言してる割には、ここ数年はあんまり変なものは買わなくなった気がします。

以前は様々な機器を駆使して目的を達成させていましたが、最近はスマートフォンタブレットでほぼ要件が満たせてしまっていて、便利になったのはいいですが趣味としては寂しい思いもあります。 さらに、最近の機器の性能的な寿命が延びていることもあって、結構長く使いそうなものばかりです。

去年くらいから、会社以外の外で何かする機械も多くなってきていて、それに合わせて買ったものもモバイル関連ばかりになってます。

続きを読む

mavenデプロイで軽くハマった件

初期開発ベンダーの秘伝のタレのようなbuild.xmlから脱却して、コモディティ化されたビルド・依存性管理とビルド成果物の管理をきちんとやらなきゃダメ、ってアジし続けて最近になってようやく許しが出たのでSonatype Nexusをセットアップして既存プロジェクトとにらめっこしながらpom.xmlと格闘の日々。

JenkinsのプラグインとNexusがよく出来過ぎててMavenインハウスリポジトリの構築やデプロイ設定そのものはすごく簡単。

問題はpom.xml

「依存ライブラリのバージョンは移行前と完全一致」「ソースコードのantビルド結果とmavenビルド結果はバイナリ完全一致」といった多分そこまで頑張らなくてもいいんだろうけど、何かあったら絶対ツッ込まれるポイントはどうにかクリア。

Snapshotのビルドとデプロイまで上手くいったので次はRelease、と思ったら以下のエラーでハマる。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project XXXXXX: Cannot prepare the release because you have local modifications :
[ERROR] [target/XXXXXX-0.0.1-SNAPSHOT.jar:unknown]
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project XXXXXX: Cannot prepare the release because you have local modifications : 
[target/XXXXXX-0.0.1-SNAPSHOT.jar:unknown]

    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.jvnet.hudson.maven3.launcher.Maven32Launcher.main(Maven32Launcher.java:132)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:330)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:238)
    at jenkins.maven3.agent.Maven32Main.launch(Maven32Main.java:181)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at hudson.maven.Maven3Builder.call(Maven3Builder.java:136)
    at hudson.maven.Maven3Builder.call(Maven3Builder.java:71)
    at hudson.remoting.UserRequest.perform(UserRequest.java:121)
    at hudson.remoting.UserRequest.perform(UserRequest.java:49)
    at hudson.remoting.Request$2.run(Request.java:326)
    at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.maven.plugin.MojoFailureException: Cannot prepare the release because you have local modifications : 
[target/XXXXXX-0.0.1-SNAPSHOT.jar:unknown]

    at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:299)
    at org.apache.maven.plugins.release.PrepareReleaseMojo.execute(PrepareReleaseMojo.java:247)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    ... 31 more
Caused by: org.apache.maven.shared.release.ReleaseFailureException: Cannot prepare the release because you have local modifications : 
[target/XXXXXX-0.0.1-SNAPSHOT.jar:unknown]

    at org.apache.maven.shared.release.phase.ScmCheckModificationsPhase.execute(ScmCheckModificationsPhase.java:185)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:234)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:169)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:146)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:107)
    at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:291)
    ... 34 more

なんかもう全然わからなくて泣きそうだったんですが、どうやらtargetディレクトリをリポジトリに書いちゃっていたのがまずかったようです。(target/**はignoreしてるけど、target自体は登録されていた)

とりあえずはワークフローを一本通せたのでひと段落。

あと、ときどきデプロイ時に

WARNING: Couldn't clean up oid=3 from null

というのが出るんですが、情報が見当たらず。デプロイ自体は問題なくうまくいっているので放置ですかね...

今まで「Mavenは依存性解決とビルドのためのツール」という感じしか持っていませんでしたが(SNAPSHOTの意味すらよくわかってなかった)、この件でいまさらながらMavenのことがそこそこわかってきたような気がします。

Seasar2使いがこの先生きのこるには

(手前ツイートですが)

当初、色んな考え方を書こうと箇条書きにしてみたらかなり発散しちゃったので、あの場で自分が思ったことだけ書きます。*1

*1:※この発言は個人の見解です。所属する組織の公式見解だったらいいのに。

続きを読む

Seasar Conference 2015 Not 同窓会 But 卒業式 #seasarcon

というわけで行ってきました。

個人的には技術云々のセッションにはほとんど参加せずいわゆる"エモい"セッションに多く参加しました。 ていうかずっとS405に居ました。

続きを読む

メモリが少ない環境でのJava8使用の注意点

諸般の都合でどうしてもメモリが潤沢ではない環境でのテストを行わなければならない場合があるかと思います。

また、Java7もすでにEOLということでJava8の開発も多くなっているかと思いますが、Java8になって初めて遭遇した問題がありました。

そんなわけでJava8で開発を始めた頃のお話です。

続きを読む

Seasarに思いを馳せる

思いを馳せるどころか今でも普通に使ってるわけですが。

それどころか、Javaメインで数社・3桁近いプロジェクトに携わってきたのになぜか仕事でSpringやGuiceを使ったコードに全く関わることがありませんでした。(なのでプライベートで書き始めることにしました)

誰もが目を疑ったででしょう、あのカンファレンスが帰ってきました。

続きを読む