0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-31

イントロ

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

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

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

Windowsの場合
image.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.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?