eclipseで作成したJavaコードを、UbuntuでJarの実行形式をコマンドラインで作成する方法

#イントロ
Windowsでeclipseで作成したJavaコードを
UbuntuでJarの実行形式をコマンドラインで作成する方法。


以下は、指定ディレクトリ以下を表示するプログラム。

```
root@sf:/home/rt/work/plog_java/seaf# java -jar jars/seaf.jar .
0=., 1=null.
./bin
./bin/seaf
./bin/seaf/main.class
./bin/seaf/ClassTree.class
./bin/seaf/ClassXML.class
./bin/seaf/Log.class

```

ハマったのは、「MANIFEST.MF」の記載内容。
解決方法は、eclipceでjarの実行ファイルを作成して出来たjarファイルを
7zipなどの解凍ツールで解凍して記載内容をこぴった。


#環境
###Windows10(64bit)

###Ubunts20.04
root@sf:/home/rt/work/plog_java/seaf# cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"

###Java バージョン
Ubunt側
root@sf:/home/rt/work/plog_java/seaf# java -version
openjdk version "9"
OpenJDK Runtime Environment (build 9+181)
OpenJDK 64-Bit Server VM (build 9+181, mixed mode)

ダウンロード
Javaアーカイブより、自分が欲しいVerをダウンロードする(多分直リンクは取得できなさそう。同意が必要)
https://jdk.java.net/


```
$ wget https://download.java.net/openjdk/jdk9/ri/jdk-9+181_linux-x64_ri.zip

```

適当な場所に解凍して
$ unzip jdk-9+181_linux-x64_ri.zip

.bashrc ファイルに、解凍したpathをexportで指定して、javaの実行ファイルを教える。

```
root@sf:/home/rt/work/plog_java/seaf# cat ~/.bashrc 
 (省略)
export JAVA_HOME="/home/rt/bin/java-se-9-ri/jdk-9/"
export PATH="$JAVA_HOME/bin:${PATH}"
```


###eclipse
windows側
https://mergedoc.osdn.jp/
より、pleiades-2020-12-java-win-64bit-jre_20201222.zip　をダウンロード以下の赤丸。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/8a014f55-71bc-017d-ab1f-1af44463d28e.png)




#ubuntuでコマンドラインで実行ファイルjarを作成

classes作成、jar作成前の、構成はこんな感じ（Windows、Ubuntu共通）

```
root@sf:/home/rt/work/plog_java/seaf# tree .
.
├── MATE-INFO
│   └── MANIFEST.MF
├── bin
├── classes
├── jars
├── mybuild.sh
└── src
          ├── module-info.java
          └── seaf
                    ├── ClassTree.java
                    ├── Log.java
                    └── main.java


```

ubuntuで、class作成、jarの実行ファイル作成のスクリプトは以下。
実行形式に変更する。
chmod 755 mybuild.sh
モジュール名「seaf」や、ビルドしたい「src/*.java src/seaf/*.java」としている部分は、自分の環境に合わせて下さい。

```mybuild.sh
#CLASSを作成
javac -sourcepath src -d classes src/*.java src/seaf/*.java

#JARを作成
jar cvfm jars/seaf.jar MATE-INFO/MANIFEST.MF -C classes .

```

ビルド
./mybuild.sh
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/c9ebb358-6e5e-9109-a129-1aba6b14a9be.png)


MANIFEST.MFファイル

``` MATE-INFO/MANIFEST.MF
Manifest-Version: 1.0
Main-Class: seaf.main
Class-Path: .

```

module-info.java

```java\module-info.java

module seaf {
	requires java.logging;
}

```

main.java

```java\main.java

/**
 *
 */
package seaf;

/**
 * @author su5fi
 *
 */
public class main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		test1(args);
	}

	private static void test1(String[] args) {
		String[] array = new String[args.length+2];

		System.arraycopy(args,0,array,0,args.length);

		Log.d("0="+array[0]+", 1="+array[1]);


		String path = array[0];

		ClassTree.tree(path);

	}

}

```


Log.java

```java\Log.java

package seaf;

public class Log {

	public static void d(String mes) {
		System.out.print(mes);
	}


}

```

ClassTree.java

```java\ClassTree.java

package seaf;

import java.io.File;

public class ClassTree {

    String name = "seaf";

    public static void tree(String path){

        File f = new File(path);
        print(f);
    }

    //再帰的に取得する処理
    public static void print(File file){
        System.out.println(file.getPath());
        File[] fileList = file.listFiles();
        if(fileList != null){
            for(File f: fileList){
                   print(f);
            }
        }
    }

}

```



実行方法


```
 java -jar jars/seaf.jar .

```

Ubuntuの場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/9fa62d89-9a57-9ca6-ab38-af168ed43d84.png)


Windowsの場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/924d0739-670f-9339-dd17-4835a2b6bfba.png)







#参考URL

https://www.zunouissiki.com/java-retrieving-files-in-a-directory-recursively/
https://qiita.com/gakuseikai/items/255a4e594a31955fa997
https://qiita.com/nmatsui/items/73ad642838631bcdc92e

end.