cloud9_note

cloud9に限らないメモ

View on GitHub

Maven

公式

Maven Getting Started Guide

新規プロジェクト作成

mvn -B archetype:generate \
 -DarchetypeGroupId=org.apache.maven.archetypes \
 -DgroupId=ittimfn.sample \
 -DartifactId=sample

※変更していいのは3行目と4行目のみ。1行目と2行目は変えてはいけない。

mvn -B archetype:generate \
 -DgroupId=ittimfn.sample
 -DartifactId=SampleApp
 -DarchetypeArtifactId=maven-archetype-quickstart
 -DarchetypeVersion=1.4

WebApplicationプロジェクト作成

mvn -B archetype:generate \
  -DarchetypeArtifactId=maven-archetype-webapp \
  -DgroupId=com.example.log4j2 \
  -DartifactId=Log4j2_Web_Application_Sample

参考

https://qiita.com/KevinFQ/items/e8363ad6123713815e68

Javaバージョンを指定する

<properties>
  <java.version>1.8</java.version>
  <maven.compiler.target>${java.version}</maven.compiler.target>
  <maven.compiler.source>${java.version}</maven.compiler.source>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.mainClass>com.example.Main</project.mainClass>
</properties>

SpringBootの場合

src/main/resources配下のファイルパスを取得する

import java.nio.file.Paths;

Path path = 
    Paths.get(
        Thread.currentThread()
              .getContextClassLoader()
              .getResource("app.properties") // resources下のファイルパスを指定する。
              .getPath()
    );

Mavenのresources配下のpropertiesを読み込む

exec:javaコマンドで実行する

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.2.1</version>
      <configuration>
        <mainClass>${project.mainClass}</mainClass>
      </configuration>
    </plugin>
  </plugins>
</build>

引数でmainメソッドのクラスを指定する

exec:java -Dexec.mainClass="<クラス名>"

起動引数を渡す

mvn exec:java -Dexec.mainClass="<クラス名>" -Dexec.args="'<引数1>' '<引数2>' ..."

シングルクオーテーションはなくても動くが、スペースを含む場合は必要。

package, javaコマンドで実行する

# clean compile package
mvn clean compile package

# 実行
java -classpath target/${jarファイルパス} ${mainメソッドクラスフルパス} ${引数}

dependencyタグのjarをまとめてjarにする

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>3.2.0</version>
  <executions>
    <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <archive>
      <manifest>
        <mainClass>${project.mainClass}</mainClass>
      </manifest>
    </archive>
  </configuration>
</plugin>

参考

https://qiita.com/hide/items/0c8795054219d04e5e98

package,install時にテストをスキップする

# 実行のみスキップ
mvn install -DskipTests=true

# コンパイルをスキップ
mvn install -Dmaven.test.skip=true

getter,setterを作成しない

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>

参考

https://qiita.com/opengl-8080/items/671ffd4bf84fe5e32557
https://mvnrepository.com/artifact/org.projectlombok/lombok

依存ライブラリを取り込む

mvn dependency:copy-dependencies

jarをローカルリポジトリに登録する

jar_path=
groupId=
artifactId=
version=
mvn install:install-file \
    -Dfile=${jar_path} \
    -DgroupId=${groupId} \
    -DartifactId=${artifactId} \
    -Dversion=${version} \
    -Dpackaging=jar \
    -DgeneratePom=true

依存するライブラリを除去する

含まれているライブラリのバージョンが合わないので除去したいときに使う。

        <dependency>
            <groupId>com.codeborne</groupId>
            <artifactId>selenide</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.seleniumhq.selenium</groupId>
                    <artifactId>selenium-chrome-driver</artifactId>
                </exclusion>
            </exclusions>
        </dependency>