re: Javaビルドツール入門 Maven / Gradle / SBT / Bazel 対応 - end0tknr's kipple - web写経開発
すっかり忘れてしまっていますので、上記entryに対しての自分用メモです。
目次
コマンド一覧
1.mvn archetype:generate - プロジェクト作成
対話方式 -「--batch-mode」なし
$ mvn archetype:generate
:
1864: remote -> org.apache.maven.archetypes:maven-archetype-quickstart
(An archetype which contains a sample Maven project.)
:
Choose a number or apply filter
(format: [groupId:]artifactId, case sensitive contains): 1864:
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
<略>
4: 1.0-alpha-4
5: 1.0
<略>
8: 1.4
Choose a number: 8:
Define value for property 'groupId': jp.end0tknr
Define value for property 'artifactId': javaci
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' jp.end0tknr: :
:
$ find javaci -type f
javaci/pom.xml
javaci/src/main/java/jp/end0tknr/App.java
javaci/src/test/java/jp/end0tknr/AppTest.java
バッチ方式 -「--batch-mode」あり
$ mvn archetype:generate \
--batch-mode \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DgroupId=jp.end0tknr \
-DartifactId=javaci \
-Dversion=1.0-SNAPSHOT \
-Dpackage=jp.end0tknr
2 mvn compile コンパイル
$ cd javaci/
$ find . -type f
./pom.xml
./src/main/java/jp/end0tknr/App.java
./src/test/java/jp/end0tknr/AppTest.java
$ mvn compile
$ find . -type f
./pom.xml
./src/main/java/jp/end0tknr/App.java
./src/test/java/jp/end0tknr/AppTest.java
<略>
./target/classes/jp/end0tknr/App.class
3 mvn test-compile テスト群のコンパイル
$ mvn test-compile
$ find . -type f
./pom.xml
./src/main/java/jp/end0tknr/App.java
./src/test/java/jp/end0tknr/AppTest.java
<略>
./target/classes/jp/end0tknr/App.class
./target/test-classes/jp/end0tknr/AppTest.class
5 mvn package パッケージ作成(jar,war)
$ mvn package
$ find . -type f
./pom.xml
./src/main/java/jp/end0tknr/App.java
./src/test/java/jp/end0tknr/AppTest.java
<略>
./target/classes/jp/end0tknr/App.class
./target/test-classes/jp/end0tknr/AppTest.class
./target/surefire-reports/jp.end0tknr.AppTest.txt
./target/surefire-reports/TEST-jp.end0tknr.AppTest.xml
./target/maven-archiver/pom.properties
./target/javaci-1.0-SNAPSHOT.jar
ただし、pom.xml に <packaging>jar</packaging>
のような記載が必要です。
6 mvn clean = make clean
$ mvn clean
$ find . -type f
./pom.xml
./src/main/java/jp/end0tknr/App.java
./src/test/java/jp/end0tknr/AppTest.java
7 mvn exec:java メインクラスの実行
$ mvn compile
$ mvn exec:java
ただし、pom.xml での exec-maven-plugin 指定や、
メインクラスでの main( String[] args ) 実装が必要です。
pom.xml での exec-maven-plugin指定
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>jp.end0tknr.App</mainClass>
</configuration>
</plugin>
メインクラスでの main(String[] args) 実装
package jp.end0tknr;
import jp.end0tknr.lib.Lib;
public class App {
public static void main( String[] args ) {
Lib lib = new Lib("end0tknr","I am Happy");
System.out.println( lib.getMessage() );
}
}
pom.xml に mainClass がない場合の実行
も可能なようです。
$ mvn exec:java -Dexec.mainClass=[メインクラス名] -Dexec.args=[引数]
java コマンド + jar による直接実行
$ java -jar target/javaci-1.0-SNAPSHOT.jar
といっても、.classpath と .project が生成されるだけです。
$ mvn eclipse:eclipse
$ find . -type f
./pom.xml
./src/main/java/jp/end0tknr/App.java
./src/test/java/jp/end0tknr/AppTest.java
./.classpath
./.project
試していませんが、.project から pom.xml が生成される気がします。
「mvn eclipse:eclipse」で生成された .classpath や .project が削除されます。
11 mvn install ローカルリポジトリへの登録
$ mvn install
:
[INFO] Installing /home/end0tknr/tmp/mvn-lib-1.0-SNAPSHOT.jar
to /home/end0tknr/.m2/repository/jp/end0tknr/mvn-lib/1.0-SNAPSHOT/mvn-lib-1.0-SNAPSHOT.jar
[INFO] Installing /home/end0tknr/tmp/mvn-lib/pom.xml to
/home/end0tknr/.m2/repository/jp/end0tknr/mvn-lib/1.0-SNAPSHOT/mvn-lib-1.0-SNAPSHOT.pom
または
$ mvn install:install-file \
-Dfile=/home/end0tknr/tmp/mvn-lib/target/mvn-lib-1.0-SNAPSHOT.jar \
-DgroupId=jp.end0tknr \
-DartifactId=mvn-lib \
-Dversion=1.0-SNAPSHOT \
-Dpackaging=jar
12 mvn jetty:run jetty-maven-pluginでのweb実行
$ mvn archetype:generate \
--batch-mode \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp \
-DgroupId=jp.end0tknr \
-DartifactId=mvn-web-app \
-Dversion=1.0-SNAPSHOT \
-Dpackage=jp.end0tknr
$ find . -type f
./pom.xml
./src/main/webapp/WEB-INF/web.xml
./src/main/webapp/index.jsp
$ mvn jetty:run
その後、ブラウザで、8080ポートへアクセス
xml version="1.0" encoding="UTF-8"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlnsxsi="http://www.w3.org/2001/XMLSchema-instance"
xsischemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jp.end0tknr</groupId>
<artifactId>mvn-web-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>mvn-web-app Maven Webapp</name>
<url>http://www.example.com</url>
<properties>
<projectbuildsourceEncoding>UTF-8</projectbuildsourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>mvn-web-app</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.4.v20170414</version>
<configuration>
<httpConnector>
<port>8080</port>
</httpConnector>
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
pom.xml サンプル集
xml version="1.0" encoding="UTF-8"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlnsxsi="http://www.w3.org/2001/XMLSchema-instance"
xsischemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jp.end0tknr</groupId>
<artifactId>javaci</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>javaci</name>
<url>http://www.example.com</url>
<properties>
<projectbuildsourceEncoding>UTF-8</projectbuildsourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>jp.end0tknr</groupId>
<artifactId>mvn-lib</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>jp.end0tknr.App</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>jp.end0tknr.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
その2 - web アプリ
$ mvn archetype:generate \
--batch-mode \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp \
-DgroupId=jp.end0tknr \
-DartifactId=mvn-web-app \
-Dversion=1.0-SNAPSHOT \
-Dpackage=jp.end0tknr
↑こう実行すると、↓こう生成されます
xml version="1.0" encoding="UTF-8"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlnsxsi="http://www.w3.org/2001/XMLSchema-instance"
xsischemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jp.end0tknr</groupId>
<artifactId>mvn-web-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>mvn-web-app Maven Webapp</name>
<url>http://www.example.com</url>
<properties>
<projectbuildsourceEncoding>UTF-8</projectbuildsourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>mvn-web-app</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.4.v20170414</version>
<configuration>
<httpConnector>
<port>8080</port>
</httpConnector>
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
その2 - spring-boot
$ mvn archetype:generate \
--batch-mode \
-DarchetypeGroupId=org.springframework.boot \
-DarchetypeArtifactId=spring-boot-sample-jetty-archetype \
-DgroupId=jp.end0tknr \
-DartifactId=mvn-spring-app \
-Dversion=1.0-SNAPSHOT \
-Dpackage=jp.end0tknr.spring
$ mvn package
springの場合、warでなく、jarが作成されますので、
以下のように実行するだけで、ブラウザでアクセスできます。
$ java -jar target/mvn-spring-app-1.0-SNAPSHOT.jar
xml version="1.0" encoding="UTF-8"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlnsxsi="http://www.w3.org/2001/XMLSchema-instance"
xsischemaLocation="http://maven.apache.org/POM/4.0.0
http://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>1.0.2.RELEASE</version>
</parent>
<artifactId>mvn-spring-app</artifactId>
<groupId>jp.end0tknr</groupId>
<name>Spring Boot Jetty Sample</name>
<description>Spring Boot Jetty Sample</description>
<version>1.0-SNAPSHOT</version>
<url>http://projects.spring.io/spring-boot/</url>
<organization>
<name>Pivotal Software, Inc.</name>
<url>http://www.spring.io</url>
</organization>
<properties>
<mainbasedir>${basedir}/../..</mainbasedir>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-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>