re: Javaビルドツール入門 Maven / Gradle / SBT / Bazel 対応 - end0tknr's kipple - web写経開発
すっかり忘れてしまっていますので、上記entryに対しての自分用メモです。
目次
- コマンド一覧
- 1.mvn archetype:generate - プロジェクト作成
- 2 mvn compile コンパイル
- 3 mvn test-compile テスト群のコンパイル
- 5 mvn package パッケージ作成(jar,war)
- 6 mvn clean = make clean
- 7 mvn exec:java メインクラスの実行
- 8 mvn eclipse:eclipse maven->eclipseプロジェクト化
- 9 mvn eclipse:to-maven eclipse->mavenプロジェクト化
- 10 mvn eclipse:clean eclipse->mavenプロジェクト化?
- 11 mvn install ローカルリポジトリへの登録
- 12 mvn jetty:run jetty-maven-pluginでのweb実行
- pom.xml サンプル集
コマンド一覧
No | コマンド | 内容 |
---|---|---|
0 | sudo yum install maven | インストール |
1 | mvn archetype:generate | プロジェクト作成 |
2 | mvn compile | コンパイル |
3 | mvn test-compile | テスト群のコンパイル |
4 | mvn test | テスト群の実行 |
5 | mvn package | パッケージ作成(jar,war) |
6 | mvn clean | = make clean |
7 | mvn exec:java | メインクラスの実行 |
8 | mvn eclipse:eclipse | maven->eclipseプロジェクト化 |
9 | mvn eclipse:to-maven | eclipse->mavenプロジェクト化 |
10 | mvn eclipse:clean | eclipse->mavenプロジェクト化? |
11 | mvn install | ローカルリポジトリへの登録 |
12 | mvn jetty:run | jetty-maven-pluginでのweb実行 |
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
8 mvn eclipse:eclipse maven->eclipseプロジェクト化
といっても、.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
9 mvn eclipse:to-maven eclipse->mavenプロジェクト化
試していませんが、.project から pom.xml が生成される気がします。
10 mvn eclipse:clean eclipse->mavenプロジェクト化?
「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ポートへアクセス
pom.xml
<?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 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> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </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 サンプル集
その1 - hello world程度に素朴なもの
<?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 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> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- ローカルパッケージのinstall --> <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> <!-- mvn exec:java の為 --> <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> <!-- java -jar ~ で実行する為? --> <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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="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> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </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> <!-- jetty-maven-pluginは、追加しました --> <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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="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> <main.basedir>${basedir}/../..</main.basedir> </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>