環境
OS or ソフトウェア | version |
---|---|
macOS | Sierra |
Eclipse | 4.6(NEON) |
(Eclipse plugin)Buildship Gradle Integration | 2.0 |
Java SE | 1.8.0_121_b13 |
glassfish | 4.1.1 |
gradle | 3.4.1 |
インストールについては割愛します。 |
手順
-
gradleプロジェクトを作る
Eclipseで、[新規]>[Gradle]>[Gradleプロジェクト]として、プロジェクトを新規作成する。 -
プロジェクトのプロパティを開いて、「プロジェクト・ファセット」を追加する。
-
「動的 WEB モジュール」を追加する。その時、プロジェクト・ファセットの画面右側の「ランタイム」を選んで「Glassfish4」を選択する。
-
build.gradleを以下のように修正する。
build.gradle
apply plugin: 'war'
apply plugin: 'java-library'
repositories {
mavenCentral()
jcenter()
}
dependencies {
providedCompile 'org.projectlombok:lombok:1.16.4'
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.6'
compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.8.6'
providedCompile 'javax:javaee-web-api:7.0'
providedCompile fileTree(dir: '/glassfish4/glassfish/modules', include: '*.jar')
api 'org.apache.commons:commons-math3:3.6.1'
implementation 'com.google.guava:guava:21.0'
testImplementation 'junit:junit:4.12'
}
war {
exclude 'WEB-INF/lib/**'
exclude 'WEB-INF/classes/**'
}
-
プロジェクトを右クリックして、[Gradle]>[Gradleプロジェクトのリフレッシュ]を実施する。
この時、ライブラリのGlassfishのランタイムが消えてしまう謎の事象あり・・・。再度プロジェクト・ファイセットを開いて付け直す必要がある...なぜかは不明です(汗) -
あとはソースファイルを書いて、サーバに追加して実行する。
link.griffin.study_gradle.jaxrs.ApplicationConfig.java
package link.griffin.study_gradle.jaxrs;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
@ApplicationPath("stdy")
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig(){
//自作のresourceを登録
this.packages(ApplicationConfig.class.getPackage().getName());
this.packages("com.snail.waf21.rest")
//Jacson用のクラスを登録
.register((new JacksonJaxbJsonProvider(new ObjectMapper(),
JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS)))
//JSONP用のクラスを登録
.register(org.glassfish.jersey.jackson.JacksonFeature.class);
}
}
link.griffin.study_gradle.jaxrs.SampleResource.java
package link.griffin.study_gradle.jaxrs;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import link.griffin.study_gradle.jaxrs_sdo.DataSdo;
@Path("rs")
public class SampleResource {
@GET
@Path("run")
@Produces(MediaType.APPLICATION_JSON)
public DataSdo run(){
DataSdo data = new DataSdo();
data.setName("hogehoge");
data.setId(12345);
return data;
}
}
link.griffin.study_gradle.jaxrs_sdo.DataSdo.java
package link.griffin.study_gradle.jaxrs_sdo;
import javax.xml.bind.annotation.XmlRootElement;
@lombok.Data
@XmlRootElement
public class DataSdo {
private String name = "";
private Integer id = 0;
}
- このサンプルであれば、"http://localhost:8080/study_gradle/stdy/rs/run" でアクセスできる。