Maven executable jar〜実行可能Jarファイル出力〜

イントロダクション

RPiへのデプロイをする時にMacからJARファイルをSSHで転送するやり方は不便なので以下の手順でできないか検討してみます。

デプロイのフロー

  1. Mac上で起動テストを行ったソースをGitへ登録(Push)
  2. RPiで上記のプロジェクトをダウンロード
  3. RPi上でソースをビルドしてJARファイルを作成

この手順でJARファイルを作成し、実行する、上記の手順はRPi起動時に自動実行する様にautostartファイルに記載する

開発端末でのMaven設定(pom.xml)

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/maven-v4_0_0.xsd">
  
  <!-- プロジェクト設定 -->
  
 <build>
 <!-- 入出力の設定 -->
 <!-- DEFAULT RASPBERRY PI PROPERTIES -->
 <pi.host>XXX.XXX.XXX</pi.host>
 <pi.port>22</pi.port>
 <pi.user>user_name</pi.user>
 <pi.password>password</pi.password>
 <pi.deployDirectory>/home/user_name/</pi.deployDirectory>
 <pi.main.class>your.package.name.mainClass</pi.main.class>

 <plugins>
   <plugin> 
      <!-- ビルド設定:mvn [plugin name] --> 
   </plugin>
 </plugins>
</build>
 <reporting>
   <plugin>
      <!-- レポート設定 -->
   </plugin>
 </reporting>
 <dependencies>
   <dependency>
     <!-- ライブラリ依存関係の設定 -->
   </dependency>
 </dependencies>
</project>

この構成の中に必要な情報を記述する。

作成した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>zenryokuservice</groupId>
    <artifactId>PAppletRpiCtl</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <repositories>
        <repository>
            <id>RPiCtl</id>
            <url>https://github.com/ZenryokuService/rpictl</url>
        </repository>
    </repositories>

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

    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>http://repo1.maven.org/maven2/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </pluginRepository>
    </pluginRepositories>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.processing/core -->
        <dependency>
            <groupId>org.processing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.6</version>
        </dependency>
    </dependencies>
    <build>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>libs/</classpathPrefix>
                            <mainClass>
                                pictl.swing.frame.RpiCtl
                            </mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Mac上でのMavenビルド結果(RPi上では未実施)

結果、上記の方法ではできませんでした。

原因

  1. 「マニフェスト属性がありません」と怒られる
  2. 「processingを使用するためのJARがない」と怒られる 

問題部分

  • pomファイルにマニフェストを追加していなかった
  • 参照するJARを出力するJARにインクルードしていなかった

解決

足りない部分をpomファイルに記載してビルドする

processingから参照しているものがある様だ。。。

<修正箇所>

・jarプラグインのバージョンを追記

・${artifactId}を${project.artifactId}に修正

 

2018/09/29 現在:調査中

<参考サイト>

processing: https://github.com/processing/processing/releases

maven: https://www.ibm.com/developerworks/jp/java/library/j-5things13/

pom: https://stackoverflow.com/questions/49398894/unable-to-compile-simple-java-10-project-with-maven

補足

実はpomファイルでjarを出力する前にRPi上では画面を起動するために(processingを起動するためにXFCE4をインストール、起動する必要があります。

この部分に関しては後日。。。

2018-09-30現在

まるで動かない。。。違う手段を検討する。。。