あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

Debian 9 に Maven をインストール 、その後、動作確認

1. Debian 9 に Maven をインストールする。

# apt-get install maven 

..snip..

maven (3.3.9-4) を設定しています ...
update-alternatives: /usr/bin/mvn (mvn) を提供するために自動モードで /usr/share/maven/bin/mvn を使います

2. インストール後に Maven のバージョンを確認

# mvn -version
Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_25, vendor: Oracle Corporation
Java home: /usr/lib/jvm/jdk1.8.0_25/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "4.9.0-9-686-pae", arch: "i386", family: "unix"

3. プロジェクトの作成
途中、'groupID': は com.myapp を、'artifactId': は myapp を入力、それ以外は Enter を入力

$ mvn archetype:generate
[INFO] Scanning for projects...
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom (4 KB at 0.9 KB/sec)
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/22/maven-plugins-22.pom

..snip..

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1470: 
 
Choose org.apache.maven.archetypes:maven-archetype-quickstart version: 
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
7: 1.3
8: 1.4
Choose a number: 8: 

.. snip ..

Define value for property 'groupId': com.myapp
Define value for property 'artifactId': myapp
Define value for property 'version' 1.0-SNAPSHOT: : 
Define value for property 'package' com.myapp: : 
Confirm properties configuration:
groupId: com.myapp
artifactId: myapp
version: 1.0-SNAPSHOT
package: com.myapp
 Y: : 
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.myapp
[INFO] Parameter: artifactId, Value: myapp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.myapp
[INFO] Parameter: packageInPathFormat, Value: com/myapp
[INFO] Parameter: package, Value: com.myapp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: com.myapp
[INFO] Parameter: artifactId, Value: myapp
[INFO] Project created from Archetype in dir: /home/xxxx/project/work/myapp

.. snip ..

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19:50 min
[INFO] Finished at: 2020-01-26T15:45:40+09:00
[INFO] Final Memory: 13M/61M
[INFO] ------------------------------------------------------------------------

4. 検証する。

$ cd myapp

$ mvn validate
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building myapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.977 s
[INFO] Finished at: 2020-01-26T15:48:00+09:00
[INFO] Final Memory: 4M/15M
[INFO] ------------------------------------------------------------------------

5. コンパイルする。

$ mvn compile
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building myapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/3.0.2/maven-resources-plugin-3.0.2.pom

..snip..

Downloaded: https://repo.maven.apache.org/maven2/com/thoughtworks/qdox/qdox/2.0-M9/qdox-2.0-M9.jar (310 KB at 34.4 KB/sec)
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/xxxx/project/work/myapp/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:22 min
[INFO] Finished at: 2020-01-26T15:50:49+09:00
[INFO] Final Memory: 14M/37M
[INFO] ------------------------------------------------------------------------

6. テストする。

~/project/work/myapp$ mvn test
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building myapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.22.1/maven-surefire-plugin-2.22.1.pom

..snip..

Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit4/2.22.1/surefire-junit4-2.22.1.jar (83 KB at 48.7 KB/sec)
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.myapp.AppTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.369 s - in com.myapp.AppTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 56.263 s
[INFO] Finished at: 2020-01-26T16:04:26+09:00
[INFO] Final Memory: 16M/40M
[INFO] ------------------------------------------------------------------------

7. パッケージを生成する。

~/project/work/myapp$ mvn package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building myapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/3.0.2/maven-jar-plugin-3.0.2.pom

..snip..

[INFO] Building jar: /home/xxxx/project/work/myapp/target/myapp-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 28.561 s
[INFO] Finished at: 2020-01-26T16:08:19+09:00
[INFO] Final Memory: 12M/97M
[INFO] ------------------------------------------------------------------------

8. フォルダ構成を確認する。

$ tree
.
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └── com
│   │           └── myapp
│   │               └── App.java
│   └── test
│       └── java
│           └── com
│               └── myapp
│                   └── AppTest.java
└── target
    ├── classes
    │   └── com
    │       └── myapp
    │           └── App.class
    ├── generated-sources
    │   └── annotations
    ├── generated-test-sources
    │   └── test-annotations
    ├── maven-archiver
    │   └── pom.properties
    ├── maven-status
    │   └── maven-compiler-plugin
    │       ├── compile
    │       │   └── default-compile
    │       │       ├── createdFiles.lst
    │       │       └── inputFiles.lst
    │       └── testCompile
    │           └── default-testCompile
    │               ├── createdFiles.lst
    │               └── inputFiles.lst
    ├── myapp-1.0-SNAPSHOT.jar
    ├── surefire-reports
    │   ├── TEST-com.myapp.AppTest.xml
    │   └── com.myapp.AppTest.txt
    └── test-classes
        └── com
            └── myapp
                └── AppTest.class

28 directories, 13 files

9. pom.xml を変更する。
pom.xml のバックアップを取ってから、編集する。

$ cp -aiv pom.xml pom.xml.`date +%Y%m%d`
'pom.xml' -> 'pom.xml.20200126'

$ vi pom.xml
$ diff -u pom.xml.`date +%Y%m%d` pom.xml
--- pom.xml.20200126	2020-01-26 15:45:40.525060334 +0900
+++ pom.xml	2020-01-26 16:56:36.444269386 +0900
@@ -51,6 +51,15 @@
         <plugin>
           <artifactId>maven-jar-plugin</artifactId>
           <version>3.0.2</version>
+          <configuration>
+            <archive>
+              <manifest>
+	        <addClasspath>true</addClasspath>
+                <classpathPrefix>lib/</classpathPrefix>
+                <mainClass>com.myapp.App</mainClass>
+              </manifest>
+	    </archive>
+          </configuration>
         </plugin>
         <plugin>
           <artifactId>maven-install-plugin</artifactId>

10. パッケージを再生成する。
clean してから package を作成する。

$ mvn clean
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building myapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/3.1.0/maven-clean-plugin-3.1.0.pom

$ mvn package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building myapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ myapp ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
..snip..

[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ myapp ---
[INFO] Building jar: /home/xxxx/project/work/myapp/target/myapp-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.653 s
[INFO] Finished at: 2020-01-26T16:59:54+09:00
[INFO] Final Memory: 12M/99M
[INFO] ------------------------------------------------------------------------

11. 動作を確認
作成後の jar ファイルを実行して動作を確認する。

$ LANG=C java -jar target/myapp-1.0-SNAPSHOT.jar
Hello World!