はじめに
タイトル通り、Ubuntu に Maven をインストールしてコンパイルしたときのお話。
後述する通りインストールは特に問題ありませんでしたが、プロジェクト作成→コンパイルでエラーが発生したのでメモっておくことにします。
インストール
インストール手順に従ってインストールしていきます。
まず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
ターミナルで「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.