vaguely

和歌山に戻りました。ふらふらと色々なものに手を出す毎日。

【Ubuntu】Mavenのインストール → コンパイル

はじめに

タイトル通り、UbuntuMaven をインストールしてコンパイルしたときのお話。

後述する通りインストールは特に問題ありませんでしたが、プロジェクト作成→コンパイルでエラーが発生したのでメモっておくことにします。

インストール

インストール手順に従ってインストールしていきます。

まずMaven のダウンロードページからバイナリ版をダウンロードして、任意の場所に展開します。
(今回は Documents フォルダに置きました)

http://maven.apache.org/download.cgi

.bashrc にパスを追加します。

export PATH=/home/ユーザー名/Documents/apache-maven-3.5.3/bin:$PATH
export JAVA_HOME=/home/ユーザー名/Documents/jdk-10
export PATH=$PATH:$JAVA_HOME/bin
  • 下二行は Java のパスです。 Maven で使用される Java は、この JAVA_HOME の設定を自動で見るようです。

ターミナルで「mvn -version」と打ってバージョンや使用する Java のバージョンなどの情報が出たら OK です。

プロジェクトを作成する

Getting started に従って、プロジェクトを作成します。

mvn -B archetype:generate \
  -DarchetypeGroupId=org.apache.maven.archetypes \
  -DgroupId=com.mycompany.app \
  -DartifactId=my-app
  • プロジェクトの Archetype(テンプレート) として、「org.apache.maven.archetypes」を指定しています。
  • 「BUILD SUCCESS」とメッセージがでれば OK です。

コンパイル(失敗)

じゃあ、ということで次の手順であるコンパイルをやってみます。

。。。

失敗しました/(^o^)\

[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------------< com.mycompany.app:my-app >-------------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-app ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/ユーザー名/Documents/workspace/my-app/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file to /home/ユーザー名/Documents/workspace/my-app/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Source option 5 is no longer supported. Use 6 or later.
[ERROR] Target option 1.5 is no longer supported. Use 1.6 or later.
[INFO] 2 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.286 s
[INFO] Finished at: 2018-03-27T07:12:06+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project my-app: Compilation failure: Compilation failure: 
[ERROR] Source option 5 is no longer supported. Use 6 or later.
[ERROR] Target option 1.5 is no longer supported. Use 1.6 or later.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

エラーの内容を見ると、何かのバージョンが合っていないようです。
また、エンコーディングの警告も出ていますね。

あれこれググった結果、「何か」とは Mavenコンパイラーのバージョンのことで、エンコーディングの指定とともに、 pom.xml(プロジェクトのフォルダ直下に生成される) に記述が必要らしいとわかりました。

Before

< 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/maven-v4_0_0.xsd">
  < modelVersion>4.0.0< /modelVersion>
  < groupId>com.mycompany.app< /groupId>
  < artifactId>my-app< /artifactId>
  < packaging>jar< /packaging>
  < version>1.0-SNAPSHOT< /version>
  < name>my-app< /name>
  < url>http://maven.apache.org< /url>
  < dependencies>
    < dependency>
      < groupId>junit< /groupId>
      < artifactId>junit< /artifactId>
      < version>3.8.1< /version>
      < scope>test< /scope>
    < /dependency>
  < /dependencies>
< /project>

After

< 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/maven-v4_0_0.xsd">
  < modelVersion>4.0.0< /modelVersion>
  < groupId>com.mycompany.app< /groupId>
  < artifactId>my-app< /artifactId>
  < packaging>jar< /packaging>
  < version>1.0-SNAPSHOT< /version>
  < name>my-app< /name>
  < url>http://maven.apache.org< /url>
  

  < properties>
    < maven.compiler.source>1.6< /maven.compiler.source>
    < maven.compiler.target>1.6< /maven.compiler.target>
    < project.build.sourceEncoding>UTF-8< /project.build.sourceEncoding>
  < /properties>
  

  < dependencies>
    < dependency>
      < groupId>junit< /groupId>
      < artifactId>junit< /artifactId>
      < version>3.8.1< /version>
      < scope>test< /scope>
    < /dependency>
  < /dependencies>
< /project>

これで「mvn compile」も正しく実行できるようになりました。

my-app > target > classes > com > mycompany > app に App.class というクラスファイルが出力されます。

実行方法は下記の2つがあるようです。

1

下記コマンドを実行する

mvn exec:java -Dexec.mainClass="mvn exec:java -Dexec.mainClass="com.mycompany.app.App""

2

Jar ファイルを作成

mvn package

Jar ファイルを実行

java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.

参照