Hatena::Groupprogram

ひとり開発日記。 このページをアンテナに追加 RSSフィード

2015/04/24 (Fri)

RESTEasy + Guice のプロジェクトをmavenで作る

| RESTEasy + Guice のプロジェクトをmavenで作る - ひとり開発日記。 を含むブックマーク はてなブックマーク - RESTEasy + Guice のプロジェクトをmavenで作る - ひとり開発日記。

Maven Central Repositoryには、既に、RESTEasy + Google Guice 用のarchetypeが用意されているんですね。

試した環境は以下。

mvn archetype:generate -Dfilter=resteasy

対話型のプロジェクト作成モードに入ります。

c:\workspace>mvn --v
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T22:51:42+09:00)
Maven home: C:\Program Files\apache\apache-maven-3.2.2\bin\..
Java version: 1.8.0_05, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_05\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
c:\workspace>mvn archetype:generate -Dfilter=resteasy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> com.pampanet:shiro-guice-resteasy-webapp-archetype (Maven Archetype for building Secure RESTful Web Services Archetype with Apache Shiro 1.2.3, RestEasy 3 and Google Guice 3.0)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): :

Group ID/Artifact IDを指定して実行時は、以下のようになりますね。

mvn archetype:generate -DarchetypeGroupId=com.pampanet -DarchetypeArtifactId=shiro-guice-resteasy-webapp-archetype

書きだされたプロジェクト、なかなかモダンでいい感じです。

参考
トラックバック - http://program.g.hatena.ne.jp/halflite/20150424

2014/12/29 (Mon)

今年使い始めて、割といい感じのJavaライブラリ3選

| 今年使い始めて、割といい感じのJavaライブラリ3選 - ひとり開発日記。 を含むブックマーク はてなブックマーク - 今年使い始めて、割といい感じのJavaライブラリ3選 - ひとり開発日記。

Scribe

FacebookTwitterアカウントで認証するようなのを作る必要があったんで、調べたらコレが簡単そうだったんで。 いや、実際に試したらすごく簡単でしたわぁ。

まぁ、SNSアカウントOAuth認証、って本来、これ位抽象化されるべきだったんですよね…。

Retrofit

RESTful APIからJSON形式でデータを取ってくる必要があったときに使いました。

HTTP経由で、データを取ってくる時の処理って、類型的って言うか、まぁ、大半は「お約束」の連鎖なので、こういう「要所要所だけで自分の実装をかけばいい」のはありがたいですし、「アノテーションを付けたinterfaceを定義するだけで、実装はしなくてもいい」って言うモダンさ、実にいい感じですわぁー。

Kaptcha

パスワードでのログインするようなシステムでは、「なんか重要なデータを誤って消さないよう、確認する画面」で、ログイン時のパスワード入力させて誤操作を防ぐ、とかは定石なんだけど、OAuth認証の場合はシステム上パスワード持ってない訳で、ハテどうしたもんか、やっぱCaptchaかな、と思って使いはじめました。

デフォルト状態で、まぁまぁ読みやすい文字を出力してくれるんで、変な小細工設定無しでもOKなのがありがたいッス

ちなみに、最新バージョン2.3.2は、Maven Central Repositoryに無いっぽく、独自リポジトリをpom.xmlに書き足す必要があるので、要注意。

	<repositories>
		<repository>
			<id>google-maven-snapshot-repository</id>
			<name>Google Maven Snapshot Repository</name>
			<url>https://m2repos.googlecode.com/svn/nexus</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
トラックバック - http://program.g.hatena.ne.jp/halflite/20141229

2014/09/20 (Sat)

Webjarsは便利ですね。

| Webjarsは便利ですね。 - ひとり開発日記。 を含むブックマーク はてなブックマーク - Webjarsは便利ですね。 - ひとり開発日記。

タイトルで出オチなんですけどね…。

ウェブアプリ/ウェブサービスを作る以上、JavaScript/CSSの難題を避ける訳にはいかなくて、そのしょっぱなの問題は、以下のようなもの。

サーバーサイドをJavaベースで作るのに、そのためだけにGruntとかYeomanとか導入も、ちょっと大袈裟だなぁ、と思っていたのですが、Mavenのpom.xmldependencyを書けばいいだけの、Webjarsは便利で良いですね。*1

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>zeptojs</artifactId>
    <version>1.0</version>
</dependency>

例えば、Zepto.JSdependencyはこんな風に記述。


CSSも、Bootstrapとか、その定番派生モノも大抵入っていて、例えばBootswatchFlat UIFlatstrapウェブフォントアイコン集のFontawsomeなんかを組み合わせると、小規模な社内ツール位は簡単に仕上がるんでないでしょうか。

*1:当たり前ですが、クラスパスにJARとして入るだけなので、Servletベースだと、自前でInputStream / OutputStream / HttpServletRequest / HttpServletResponse廻りの云々を書かないとダメですよ。

トラックバック - http://program.g.hatena.ne.jp/halflite/20140920

2014/03/31 (Mon)

Resteasy 3.0.6.Final の依存性解決で"Unable to read jar manifest from..."と出る

| Resteasy 3.0.6.Final の依存性解決で"Unable to read jar manifest from..."と出る - ひとり開発日記。 を含むブックマーク はてなブックマーク - Resteasy 3.0.6.Final の依存性解決で"Unable to read jar manifest from..."と出る - ひとり開発日記。

JAX-RSJSONを返すプログラムを作ろうとして、慣れているResteasy+Guiceで作ろうかな、今の最新バージョン3.0.6.Finalをpom.xmlに記載したんですね。

<dependency>
	<groupId>org.jboss.resteasy</groupId>
	<artifactId>resteasy-guice</artifactId>
	<version>3.0.6.Final</version>
</dependency>

そうしたら、以下のような警告が…

[INFO] Unable to read jar manifest from C:\Users\xxx\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.1_spec\1.0.1.Final\jboss-annotations-api_1.1_spec-1.0.1.Final.jar

JARファイル内のmanifestの読出しに失敗してる…???

でも、jboss-annotations-apiって、昔のJSR 250のアノテーション定義の独自実装で、今のResteasyなら要らんかな*1、って思って、exclusionで除外したら、警告は出なくなり*2、普通に動きました。

<dependency>
	<groupId>org.jboss.resteasy</groupId>
	<artifactId>resteasy-guice</artifactId>
	<version>3.0.6.Final</version>
	<exclusions>
		<exclusion>
			<groupId>org.jboss.spec.javax.annotation</groupId>
			<artifactId>jboss-annotations-api_1.1_spec</artifactId>
		</exclusion>
	</exclusions>
</dependency>

*1:jsr250-api-1.0.jarが依存性解決で自動的に入る

*2:当たり前ですがな

トラックバック - http://program.g.hatena.ne.jp/halflite/20140331

2013/11/21 (Thu)

S2JDBC-Gen用のライブラリをMavenで設定

| S2JDBC-Gen用のライブラリをMavenで設定 - ひとり開発日記。 を含むブックマーク はてなブックマーク - S2JDBC-Gen用のライブラリをMavenで設定 - ひとり開発日記。

S2JDBC-GenのAntタスクの多くは、実行時にエンティティクラスを参照します。 また、S2JDBCの動作に必要なjarファイルに加え、s2jdbc-gen-x.x.x.jarとfreemarker-2.3.x.jarが必要です。 すべてのAntタスクからエンティティクラスやjarファイルを参照できるように、あらかじめクラスパスを設定しておきます。

Seasar2 - S2JDBC-Gen - セットアップ

Doltengで作ったプロジェクトだと、配下に"lib"って言うディレクトリが作られて、そこに必要なjarファイルが入ってくるんですが、このjarが微妙に古い場合、差し替えが面倒なんですよねー…。 なので、以下のような手法を使っています。*1

必要な依存関係を、テストスコープでpom.xmlに記述

		<!-- S2JDBC-Gen -->
		<dependency>
			<groupId>org.seasar.container</groupId>
			<artifactId>s2jdbc-gen</artifactId>
			<version>${s2.ver}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.20</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.tmatesoft.svnkit</groupId>
			<artifactId>svnkit</artifactId>
			<version>1.7.8</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.geronimo.specs</groupId>
			<artifactId>geronimo-ejb_3.1_spec</artifactId>
			<version>1.0.2</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>sun.jdk</groupId>
			<artifactId>tools</artifactId>
			<version>1.7.0</version>
			<scope>system</scope>
			<systemPath>${java.home}/../lib/tools.jar</systemPath>
		</dependency>
		<!-- Junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.4</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.easymock</groupId>
			<artifactId>easymock</artifactId>
			<version>3.2</version>
			<scope>test</scope>
		</dependency>

テストスコープのjarを一括でダウンロード。

昨日のMavenで、依存ライブラリを一括ダウンロードする方法を使うのです。

mvn dependency:copy-dependencies -DincludeScope=test

s2jdbc-gen-build.xmlを修正

	<path id="classpath">
		<pathelement location="${classpathdir}"/>
		<fileset dir="target/xxx/WEB-INF/lib"/>
		<fileset dir="lib">
			<exclude name="lib/sources/**"/>
		</fileset>
	</path>

を、以下↓のように

	<path id="classpath">
		<pathelement location="${classpathdir}"/>
		<fileset dir="target/dependency"/>
	</path>

これで、antを叩くと、各タスクが実行できましたよ。

*1:ついこの前から、なんですが…。

トラックバック - http://program.g.hatena.ne.jp/halflite/20131121