端末でクラスファイルを呼び出してJavaプログラムを起動できると便利です(GUIをダブルクリックすると端末で実行できますが、それほど重要ではありません)。これまで、私は次のような一時的な修正にのみ役立ちました。
alias cs='java charstat.Charstat'
Linux は次のファイルを Java として認識します。
charstat/Charstat.class: compiled Java class data, version 52.0 (Java 1.8)
それでは、電話を有線で接続する方法はありますか?ここにUbuntu 16.04がありますが、一般的な答えを歓迎します。
問題が終了し、トラブルシューティング部分が始まります。
修正する
これまでの最も有望な行動方針は、Gillesが提案したものです。だから私は以下を実行しました。
echo ":java-class:M:0:cafebabe::/usr/bin/java:" | sudo tee /proc/sys/fs/binfmt_misc/register
今、
tomasz@tomasz-Latitude-E4200:~/Desktop$ cat /proc/sys/fs/binfmt_misc/java-class
enabled
interpreter /usr/bin/java
flags:
offset 0
magic 6361666562616265
しかし、
tomasz@tomasz-Latitude-E4200:~/Desktop$ ./Void.class
bash: ./Void.class: cannot execute binary file: Exec format error
これはUbuntu 14.04で行われました。それは以下を持っています:
binfmt-support/trusty,now 2.1.4-1 amd64 [installed,automatic]
Support for extra binary formats
重要な場合は、16.04に自動的にインストールされないようです。
昨日、Mark Plotnickのコメントに基づいて、私は次のように言いました。このガイド、役に立たない。/usr/local/bin/javawrapper
Gillesのソリューションには含まれていないラッパーが導入されました。しかし、これはArch Linux用です。
アップデート2(Ubuntu 16.06)
16.06:
tomasz@tomasz-Latitude-E4200:~/Desktop/io$ cat /proc/sys/fs/binfmt_misc/Java
enabled
interpreter /usr/local/bin/javawrapper
flags:
offset 0
magic cafebabe
そして、
tomasz@tomasz-Latitude-E4200:~/Desktop/io$ ./Nain.class
bash: ./Nain.class: No such file or directory
アップデート3
後ろにecho ":java-class:M:0:\xca\xfe\xba\xbe::/usr/bin/java:" | sudo tee /proc/sys/fs/binfmt_misc/register
:
tomasz@tomasz-Latitude-E4200:~/Desktop/io$ java Main
Please input the file location and name.
^Ctomasz@tomasz-Latitude-E4200:~/Desktop/io$ ./Main.class
Error: Could not find or load main class ..Main.class
参考までに:
tomasz@tomasz-Latitude-E4200:/proc/sys/fs/binfmt_misc$ cat java-class
enabled
interpreter /usr/bin/java
flags:
offset 0
magic cafebabe
答え1
Linux
Ubuntuはすでにjarに対してこれを行っています。とともにopenjdk-8-jreパッケージ(および以前のバージョン)jar呼び出しが実行されますjexec
。クラスに対してはこれは行われません。それはおそらく、クラスがライブラリではなくスタンドアロンの実行可能ファイルであることがほとんどないからです(つまり、jarにも同じことが当てはまります)。
クラスを処理するために同じ基本メカニズムを設定できます。このメカニズムはLinuxbinfmt_miscカーネルがヘルパープログラムを介して任意のファイルを実行できるようにする機能です。
java
Javaのコマンドラインは本当に奇妙なので、ファイル名をコマンドが実行できる名前に変換するにはラッパーを使用する必要があります。このスクリプトを別の名前で保存し/usr/local/bin/javarun
て実行可能にします。
#!/bin/sh
case "$1" in
*/*) dir="${1%/*}"; base="${1##*/}";;
*) dir="."; base="$1";;
esac
shift
case "$base" in
[!-]*.class) base="${base%.*}";;
*) echo >&2 "Usage: $0 FILENAME.class [ARGS...]"; exit 127;;
esac
case "$CLASSPATH" in
"") exec java -cp "$dir" "$base" "$@";;
*) exec java -cp "$dir:$CLASSPATH" "$base" "$@";;
esac
次のコマンドはクラスで機能します。よりhttps://unix.stackexchange.com/a/21651そしてカーネル文書 説明のために。
echo ":java-class:M:0:\xca\xfe\xba\xbe::/usr/local/bin/javarun:" | sudo tee /proc/sys/fs/binfmt_misc/register
有効にするには一度実行してください。設定を削除するには、を実行しますsudo rm /proc/sys/fs/binfmt_misc/java-class
。設定に満足したら、次のコマンドを追加します/etc/rc.local
。
echo >/proc/sys/fs/binfmt_misc/register ":java-class:M:0:\xca\xfe\xba\xbe::/usr/local/bin/javarun:"
ジッシュ
使用する場合扱いにくいシェルとして、以下を定義して、拡張子に基づいてファイルを実行させることができます。サフィックスエイリアス。
alias -s class=javarun
javarun
上記と同じスクリプトが必要です。もちろん、これはbash、ファイルマネージャ、スクリプト(このコマンドを実行するzshスクリプトを除く)ではなくzshでのみ機能します。
答え2
「.class」のmailcapプロジェクトを定義し、ブラウザ(またはデスクトップランチャー)がそれを使用するように説得できます。
しかし、これは単なる変更です。どの実行を開始するために実行するプログラムです(実際の節約はありません)。デスクトップランチャーも同様です。
追加資料: