イントロ
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 をダウンロード以下の赤丸。
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」としている部分は、自分の環境に合わせて下さい。
# CLASSを作成
javac -sourcepath src -d classes src/*.java src/seaf/*.java
# JARを作成
jar cvfm jars/seaf.jar MATE-INFO/MANIFEST.MF -C classes .
MANIFEST.MFファイル
Manifest-Version: 1.0
Main-Class: seaf.main
Class-Path: .
module-info.java
module seaf {
requires java.logging;
}
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
package seaf;
public class Log {
public static void d(String mes) {
System.out.print(mes);
}
}
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 .
参考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.