2014年2月22日土曜日
Jersey2.6(JAX-RS2.2) with Jetty9 セットアップ
JAX-RS2.*を使いたいと思って、Jersey2.6をJetty9に組み込もうとしたのですが、
四苦八苦したのでメモ
いろいろdependancyに入れすぎてたのが問題だったようです。
jsr311-apiをdependancyから取り除くとうまくいきました。
JAX-RS2.*では、Pojomappingを指定するのではなく
JAX-RS JSON Providerに対応するライブラリを追加することでJSONに対応します。
下の例では、jackson-jaxrs-json-providerを追加しています。
JavaEE3以上は、jersey-container-servlet-coreを使うよう言われますが
自分は以前のweb.xmlでの指定方法が好みなので
jersey-container-servletを使っています。
pom.xml :
<略>
<properties>
<java.version>1.7</java.version>
<jettyVersion>9.1.2.v20140210</jettyVersion>
<jerseyVersion>2.6</jerseyVersion>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jettyVersion}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jettyVersion}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jerseyVersion}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jerseyVersion}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jettyVersion}</version>
<configuration>
<webAppSourceDirectory>${basedir}/webapp</webAppSourceDirectory>
<webXmlFile>${basedir}/webapp/WEB-INF/web.xml</webXmlFile>
<jettyEnvXml>${basedir}/webapp/WEB-INF/jetty-env.xml</jettyEnvXml>
<contextPath>/</contextPath>
</configuration>
</plugin>
</plugins>
</build>
WEB-INF/web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>jersey</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>パッケージ</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>
WEB-INF/jetty-env.xml:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
<Call name="setAttribute">
<Arg>org.eclipse.jetty.webapp.configuration</Arg>
<Arg>
<Array type="java.lang.String">
<Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item>
<Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item>
<Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item>
<Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item>
<Item>org.eclipse.jetty.plus.webapp.EnvConfiguration</Item>
<Item>org.eclipse.jetty.plus.webapp.PlusConfiguration</Item>
<Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item>
<Item>org.eclipse.jetty.webapp.TagLibConfiguration</Item>
</Array>
</Arg>
</Call>
<Set name="war"><SystemProperty name="jetty.home" default="."/>/</Set>
</Configure>
2014年2月12日水曜日
Maven での デバッグ
Mavenでのデバッグ方法が検索しても見当たらなかったので
書き留めておきます。
Eclipseを利用している、m2eclipseをインストールしている前提です。
1.プロジェクトを右クリック>Debug As>Maven build...
2.Goalsに goal -Dmaven.surefire.debug test を設定
例) java ファイルを実行する場合
exec:java -Dmaven.surefire.debug test [-Dexec.mainClass="クラス名"] [-Dexec.args="引数"]
例) jettyを実行する場合
jetty:run -Dmaven.surefire.debug test
3.ParameterにName:forkCount Value:0を追加
これがないと、デバッグ用のポートをリスニングするのを回避
Maven v2.0.8 以降はmaven.surefire.debugを利用すれば
ポートを指定したリモートデバッグの必要はありません。
(実はずっとリモートデバッグしていた…)
書き留めておきます。
Eclipseを利用している、m2eclipseをインストールしている前提です。
1.プロジェクトを右クリック>Debug As>Maven build...
2.Goalsに goal -Dmaven.surefire.debug test を設定
例) java ファイルを実行する場合
exec:java -Dmaven.surefire.debug test [-Dexec.mainClass="クラス名"] [-Dexec.args="引数"]
例) jettyを実行する場合
jetty:run -Dmaven.surefire.debug test
3.ParameterにName:forkCount Value:0を追加
これがないと、デバッグ用のポートをリスニングするのを回避
Maven v2.0.8 以降はmaven.surefire.debugを利用すれば
ポートを指定したリモートデバッグの必要はありません。
(実はずっとリモートデバッグしていた…)
登録:
投稿 (Atom)