【備忘録】java -jarコマンドから開放されよう! C言語からjarファイルを実行する方法
作成日:2024-04-15 18:47:07
最新更新日:2024-04-15 18:51:19
JAVA最大の欠点
それはもちろん./で実行できない事!
java -jarと毎回書いて実行する必要が在る、、、
さすがにめんどうすぎるので、C言語からjarを実行して./で実行できるようにしてしまおう!
あ、ちなみにこれはpixiv-dlpの開発記録その1です
C側のコード
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
int i;
//実行するコマンド
char command[1000] = "java -jar /usr/local/bin/pixiv-dlp-bin/java.jar";
//コマンドライン引数をスペース区切りで結合
for (i = 1; i < argc; i++) {
strcat(command, " ");
strcat(command, argv[i]);
}
//コマンド実行
int status = system(command);
return status;
}
単純です、systemでjavaを実行するだけ。
あとはインストールスクリプトも作ってしまおう!!!!!
インストーラー
インストールスクリプトはPythonを使ったぜ、rootで実行されたか検知する機能付き
import os
BUILD_DIR = "./build/libs/"
BIN_DIR = "/usr/local/bin/"
JAR_FILE_NAME = "pixiv-dlp-1.0-SNAPSHOT-all.jar"
#インスコする関数
def INSTALL():
if(os.path.exists(BUILD_DIR + JAR_FILE_NAME)):
print("jarファイルが在るよ!")
#フォルダがなければ作る
if(os.path.exists(BIN_DIR + "pixiv-dlp-bin") == False):
os.makedirs(BIN_DIR + "pixiv-dlp-bin")
print("フォルダがなかったので作っといたで")
#gccでCをビルドする
if(os.system("gcc ./java_runner.c -o " + BIN_DIR + "pixiv-dlp") == 0):
print("gccが成功しました!")
#jarファイルをコピーする
if os.system("cp " + BUILD_DIR + JAR_FILE_NAME + " " + BIN_DIR + "pixiv-dlp-bin/java.jar") == 0:
print("全て成功!")
else:
print("無理だった!!")
else:
print("gcc失敗!!!")
else:
print("jarファイルがないよ!!!ビルドしろ!!")
#ルートで実行されたか?
if(os.geteuid() == 0):
INSTALL()
else:
print("rootで実行しろ!!")