1雛形の tree(Maven 版・隠しファイル込み)
で 4.1.1、Java 25、依存 web を選んで作った雛形の全ファイルです。強調した3つが、自分で書き足していくファイルです。 と templates は空のディレクトリです。
maven├── .gitattributes├── .gitignore├── .mvn│ └── wrapper│ └── maven-wrapper.properties├── HELP.md├── mvnw├── mvnw.cmd├── pom.xml└── src├── main│ ├── java│ │ └── com│ │ └── example│ │ └── demo│ │ └── DemoApplication.java│ └── resources│ ├── application.properties│ ├── static│ └── templates└── test└── java└── com└── example└── demo└── DemoApplicationTests.java16 directories, 10 files
2雛形の pom.xml を読む
雛形の の全文です(54行)。強調したのは、親の指定、依存、Spring Boot のです。依存に版が書かれていないのは、親の が版を決めるからです。license や scm の空のタグは、親からする項目を打ち消すためのものです。
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>4.1.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description/><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>25</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webmvc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webmvc-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
3mvnw が実際にやったこと
の入っていない だけの環境で -v を実行した出力です。設定ファイルに書かれた版の Maven を取ってきて展開し、それを実行しています。Falling back to use Java to download の行は、この実行環境に や wget が無かったために出たものです。
$ cat .mvn/wrapper/maven-wrapper.propertieswrapperVersion=3.3.4distributionType=only-scriptdistributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.16/apache-maven-3.9.16-bin.zip$ ./mvnw -vCouldn't find MAVEN_HOME, downloading and installing it ...Downloading from: https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.16/apache-maven-3.9.16-bin.zipDownloading to: /tmp/tmp.dxTu2qmV8U/apache-maven-3.9.16-bin.zipFalling back to use Java to download- Compiling Downloader.java ...- Running Downloader.java ......Found extracted Maven distribution directory: apache-maven-3.9.16Apache Maven 3.9.16 (2bdd9fddda4b155ebf8000e807eb73fd829a51d5)Maven home: /root/.m2/wrapper/dists/apache-maven-3.9.16/56ba1f9fJava version: 25.0.4.1, vendor: Eclipse Adoptium, runtime: /opt/java/openjdk
4NestJS の雛形と並べる
nest new の雛形のファイル(公式ドキュメントが挙げる主要ファイル)と対応づけた表です。対応しない行が要点です。app.module.ts に当たるファイルは Spring Boot にありません。依存の実体は、node_modules と違ってプロジェクトの外に置かれます。
Spring Boot の雛形 (Maven) NestJS の雛形 (nest new) 対応しない点pom.xml package.json pom.xml はビルドの定義も兼ねるmvnw / mvnw.cmd / .mvn/wrapper/ (対応するファイルは無い) Maven は Java に同梱されないので雛形が持つsrc/main/java/.../DemoApplication.java src/main.ts Java 側はパッケージ名の階層の下に置く(無い) src/app.module.ts Boot は起動クラスのパッケージ以下を自動で探すsrc/main/resources/application.properties (公式の一覧の5ファイルに無い) Boot が既定で読みに行く置き場所src/test/java/.../DemoApplicationTests.java src/app.controller.spec.ts Java はテストを src/test に分けるtarget/ (ビルドで出来る) dist/ (ビルドで出来る) target/classes は .class、dist は JS~/.m2/repository (プロジェクトの外) node_modules/ (中) Maven は全プロジェクトで共有する
5Gradle 版の雛形では何が変わるか
同じ条件で を選ぶと、pom.xml の代わりにこの が入ります。依存の指定は pom.xml と同じです。src 以下のファイルの配置は Maven 版と完全に同じでした。Gradle は、ソースの置き場所について Maven の規約を借りていると公式ドキュメントに書いています。
plugins {id 'java'id 'org.springframework.boot' version '4.1.1'id 'io.spring.dependency-management' version '1.1.7'}group = 'com.example'version = '0.0.1-SNAPSHOT'java {toolchain {languageVersion = JavaLanguageVersion.of(25)}}repositories {mavenCentral()}dependencies {implementation 'org.springframework.boot:spring-boot-starter-webmvc'testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'testRuntimeOnly 'org.junit.platform:junit-platform-launcher'}tasks.named('test') {useJUnitPlatform()}