Java

Mavenで差分コンパイルできない

常に

[INFO] Changes detected - recompiling the module!

というメッセージが出て全コンパイルが行われる事象。

false を設定することで、本来この機能に期待されている 賢い インクリメンタルコンパイルが行われなくなる。 (この賢いインクリメンタルコンパイル機能がバグっているため、全ファイル変更されたと見なされているのが現状。)

上記設定をfalseにすると、代わりに 通常の インクリメンタルコンパイルが行われる。 この結果、大半の場合にはfalseにした方がコンパイル時間は短縮される。

ただし、後者の 通常の インクリメンタルコンパイルは、ファイル間の依存関係などを考慮しない(、のだと思われる)。 そのため、おそらく、変更したファイルのみが再コンパイル対象となり、例えば他ファイルが使用しているインタフェースが変わった場合、使用側は再コンパイルされないため実行時エラーになる(と思われる)。

  • 常に再コンパイルが走るよりはまし。上記のような場合には手動でcleanすればよい。

  • CI環境ではcleanからビルドを始めるので影響はない。

lombok install

`java -jar lombok.jar`だとMacのEclipse Neonにインストールできなかった。手動インストールが必要。

lombok.jarを所定の場所に配置:

mv lombok.jar Eclipse.app/Contents/MacOS/

Eclipse.app/Contents/Eclipse/eclipse.ini`に-vmargs`セクションがあるので、そこにの行を追記:

-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar

Maven POM

Javaバージョン指定

<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>

formatter

formatter-maven-pluginを利用する。

    <build>
        <plugins>
            <plugin>
                <groupId>net.revelc.code.formatter</groupId>
                <artifactId>formatter-maven-plugin</artifactId>
                <version>2.8.1</version>
                <configuration>
                    <compilerCompliance>${java.version}</compilerCompliance>
                    <compilerSource>${java.version}</compilerSource>
                    <compilerTargetPlatform>${java.version}</compilerTargetPlatform>
                    <configFile>https://raw.githubusercontent.com/yukihane/prefs/master/eclipse/java-format-setting.xml</configFile>
                    <lineEnding>LF</lineEnding>
                    <skipCssFormatting>true</skipCssFormatting>
                    <skipHtmlFormatting>true</skipHtmlFormatting>
                    <skipJavaFormatting>false</skipJavaFormatting>
                    <skipJsFormatting>true</skipJsFormatting>
                    <skipJsonFormatting>true</skipJsonFormatting>
                    <skipXmlFormatting>false</skipXmlFormatting>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>format</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

Apache POI

xlsxファイルを操作したい場合は`poi-ooxml`を追加すれば残りの必要なものは依存関係で自動で入る。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.16-beta2</version>
</dependency>

slf4j

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.23</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.23</version>
</dependency>

lombok

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.14</version>
</dependency>