spring-boot-starter-parentのpom.xmlを読む

はじめてのSpring Boot

今日読もうと思ってたのに、持ってくるの忘れた(ノД`)シクシク
明日読もっと。ざっくり読んでみた感想は、こんなです↓

で、詳細はこんなです↓ #他力

irof.hateblo.jp

親ポム

maven使うときって、最初に色々やることが面倒で。
プラグイン考えたり、バージョンの組み合わせを考えたり。
あ、こっちのライブラリはSpring3.x使ってるのにこっちはSpring4.x依存だわ。とか。

Spring Bootでは、そのあたりを親ポムにまとめてくれてるので、楽そう。
という感じで、pom.xmlがキーポイントのひとつっぽいよね。気になるね。読んでみよう。

spring-boot-starter-parent

spring-boot/pom.xml at v1.3.0.M2 · spring-projects/spring-boot · GitHub

grand parent

あ、まだ親がおった。

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>1.3.0.M2</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
  </parent>

おじいちゃんポムか。とりあえず先に進もう。

properties

<properties>
  <java.version>1.6</java.version>
  <resource.delimiter>@</resource.delimiter> <!-- delimiter that doesn't clash with Spring ${} placeholders -->
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <maven.compiler.source>${java.version}</maven.compiler.source>
  <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

Javaのバージョンとか、エンコーディングはいいとして。delimiterってなんだっけこれ?
resource.delimiterプロパティは、こんな風に使ってて↓

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.6</version>
  <configuration>
    <delimiters>
      <delimiter>${resource.delimiter}</delimiter>
    </delimiters>
  </configuration>
</plugin>

で、ググったら

Apache Maven Resources Plugin - resources:resources

Set of delimiters for expressions to filter within the resources. These delimiters are specified in the form 'beginToken*endToken'. 
If no '*' is given, the delimiter is assumed to be the same for start and end.

So, the default filtering delimiters might be specified as:

<delimiters>
  <delimiter>${*}</delimiter>
  <delimiter>@</delimiter>
</delimiters>
Since the '@' delimiter is the same on both ends, we don't need to specify '@*@' (though we can).

ってことで、Springの"${}"とぶつからないように"@*@"を定義してるってことなのかな。

もうちょいググったら、まさにこれってのが見つかった。まだ理解してない。

Resource filtering default configuration and documentation is error prone · Issue #1199 · spring-projects/spring-boot · GitHub

後で読むとして先に進もう。

あれ、ちょっとまてよ、maven-resources-pluginってなんだったか忘れた。
リソースをコピーするときにフィルタリングONにしてたら置換してくれるんだったっけか?
合わせて後で調べよっと。

spring-core

spring-coreから、commons-loggingを取り除く。SLF4JでLogback使ってるなら、commons-logging要らないからね。
って、じいちゃんpomではやってないのかな?

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
      <exclusions>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
</dependencyManagement>

maven-jar-plugin

Jarに固めるやつなんだろうね。
start-classってのがエントリーポイントなんだろうね。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>${start-class}</mainClass>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
      </manifest>
    </archive>
  </configuration>
</plugin>

maven-war-plugin

こっちはwar。failOnMissingWebXmlがオフになってる。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <archive>
      <manifest>
        <mainClass>${start-class}</mainClass>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
      </manifest>
    </archive>
  </configuration>
</plugin>

ギャー、もう出社しなければ!

exec-maven-plugin

なんだこれは?

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <configuration>
    <mainClass>${start-class}</mainClass>
  </configuration>
</plugin>

git-commit-id-plugin

なにこのプラグイン

<plugin>
  <groupId>pl.project13.maven</groupId>
  <artifactId>git-commit-id-plugin</artifactId>
  <version>2.1.11</version>
  <executions>
    <execution>
      <goals>
        <goal>revision</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <verbose>true</verbose>
    <dateFormat>yyyy-MM-dd'T'HH:mm:ssZ</dateFormat>
    <generateGitPropertiesFile>true</generateGitPropertiesFile>
    <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
  </configuration>
</plugin>

spring-boot-maven-plugin

bootのプラグイン。何するんだろうなー?

<!-- Support our own plugin -->
<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>${spring-boot.version}</version>
  <executions>
    <execution>
      <goals>
        <goal>repackage</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>${start-class}</mainClass>
  </configuration>
</plugin>

maven-shade-plugin

あとは、maven-shade-pluginてのが設定してある。
なんだこれ?

宿題

ってほぼ全部やんか!