설치

Spider Silk는 Java 21 이상이 필요하다. 릴리스는 Maven Central에 게시되므로, 빌드에는 기본 저장소 외의 저장소가 필요 없다. 현재 버전은 `1.1.0`이다. CHANGELOG.md가 각 릴리스에서 바뀐 것을 나열한다.

Gradle

repositories {
    mavenCentral()
}

dependencies {
    implementation 'net.benelog.spidersilk:spider-silk-core:1.1.0'
    testImplementation 'net.benelog.spidersilk:spider-silk-test:1.1.0'
}

Maven

Maven은 기본적으로 Central에서 해석하므로, `pom.xml`은 의존성만 선언하고 그 밖에는 아무것도 선언하지 않는다:

<dependencies>
  <dependency>
    <groupId>net.benelog.spidersilk</groupId>
    <artifactId>spider-silk-core</artifactId>
    <version>1.1.0</version>
  </dependency>
  <dependency>
    <groupId>net.benelog.spidersilk</groupId>
    <artifactId>spider-silk-test</artifactId>
    <version>1.1.0</version>
    <scope>test</scope>
  </dependency>
</dependencies>

Hello, world

import net.benelog.spidersilk.App;
import net.benelog.spidersilk.WebResponse;

public class Main {

    public static void main(String[] args) {
        App app = new App();
        app.get("/hello/{name}", req -> WebResponse.text("Hello, " + req.pathParam("name")));
        app.start(8080);
    }
}
$ curl localhost:8080/hello/silk
Hello, silk

spider-silk-core`는 내장 Jetty를 함께 가져오므로, 요청을 서비스하는 데 그 밖에는 아무것도 필요 없다. 같은 앱을 내장 Tomcat이나 Undertow에서 실행하려면 `spider-silk-tomcat`이나 `spider-silk-undertow`를 추가한다; 서버 고르기을 참고한다. 대신 외부 서블릿 컨테이너에 배포하려면 배포를 참고한다. 템플릿은 별도 설정 없이 jte로 렌더링된다. FreeMarker, Handlebars, Thymeleaf는 별도의 모듈이며, 같은 방식으로 추가한다. `spider-silk-jetty-websocket은 WebSocket 엔드포인트를 추가하며, Jetty에서만 동작한다. spider-silk-openapi는 라우트 목록을 OpenAPI 문서로 바꾼다.

좌표, 패키지, 모듈 이름

`net.benelog.spidersilk`은 하나의 문자열이며, 의도적으로 세 가지 방식으로 쓰인다.

어디에 무엇인가

그룹 id

net.benelog.spidersilk, 아티팩트 id는 모듈 자체의 이름 — net.benelog.spidersilk:spider-silk-core

패키지 루트

net.benelog.spidersilk, 코어가 이를 소유하고 다른 모듈은 각각 하위 패키지 — net.benelog.spidersilk.tomcat, net.benelog.spidersilk.jetty.websocket

Automatic-Module-Name

jar가 담는 패키지 루트로, import`와 모듈 경로가 같은 이름을 쓴다 — `net.benelog.spidersilk, net.benelog.spidersilk.tomcat, net.benelog.spidersilk.jetty.websocket

Gradle 플러그인은 같은 id인 `net.benelog.spidersilk`으로 적용되고, Maven 부모 POM은 `net.benelog.spidersilk:spider-silk-maven-parent`다. 결정 32가 그 근거를 제시한다.