|||||||||||||||||||||

なんぶ電子

- 更新: 

JavaのソースをDebianでコンパイル

eclipse

筆者は、開発環境はWindowsのGUI、本番環境はDebianのCUIというケースが多いのですが、規模の小さいコードの場合ざっくりとWindowsで作っておいて後は本番環境で調整したいというケースがあったりします。

その場合の作業方法を覚書としてまとめておきました。

文字コードの問題

いつも設定を忘れてしまうのですが、WindowsのEclipseをデフォルトで利用していると文字コードはMS932になります。

このままの状態でソースコードをDebianに持っていきコンパイルすると文字コードエラーが出ます。

これを避けるためには、 Let'sプログラミング:「ソースファイルのエンコーディングを指定してコンパイルする」 によれば、Debianのjavacのオプションで「-encoding MS932」を指定するか、「-J-Dfile.encoding=MS932」とします。

後者は何をやっているかわかりづらいかもしれませんが、-JオプションはJVM(Java Virtual Machine)に対するオプションで、-Dプロパティ=値で、システムプロパティの値を設定する指定となります。

毎回オプションを指定するのが面倒だという時はEclipseのエンコードを変更する方法もあります。

「Window」→「Preferences」→「Workspace」の「Text file encoding」をOtherにして、「UTF-8」に変更します。

ただこれだけだと、既存のファイルの文字コードは変換されませんので、マーケットプレイス(「Help」→「MarketPlace」)で、文字コードを変換できるプラグインをインストールして処理します。

そこに「Autodetect Encoding」という、文字コードや改行コードを検知、表示、変換できるプラグインがあったのですが、変換をまとめて行うことができなかったため採用を断念しました。ちなみに、このプラグインの使い方はコード毎に画面右下に文字コードや改行コードが表示されるのでs、そこを右クリックして変換したいコードを選択するというものになります。

Autodetect Encoding

そんなわけで、マーケットプレイスでは目的のものを見つけられなかったため、PowerBeansさんのプラグインを利用させていただきました。ダウンロードしたjarファイルをpluginsフォルダ内に設置するだけでPackage Explorerの右クリックメニューに「文字コード変換」メニューが追加されました。少し古いものだったのですが、Version: 2021-03 (4.19.0)のEclipseで試したところ問題なさそうでした。

コンパイル環境の構築

まずJDKをインストールします。筆者のDebian環境は32bit環境だったので、選択肢が非常に限られておりopenjdk-8-jdk (8u292-b10-0+deb9u1)をaptでインストールして使うことになりました。

64bit環境ならAdoptOpenJDKなどから、ダウウンロードが可能です。

任意のデイレクトリを作成し、その下に次の3つのサブディレクトリを作成します。

  • src

    WindowsのEclipseからコピーした.javaファイルを入れるフォルダです。所属するパッケージに違いがあっても全部まとめてこのディレクトリに入れます。

  • lib

    依存ライブラリを保存するディレクトリです。

  • bin

    コンパイル後のclassファイルを出力するディレクトリです。

ファイルのコピー

ファイルのコピーはWindowsのエクスプローラーから、eclipseのワークスペース→プロジェクト名フォルダからソースを見つけてもいいですが、EclipseのPackage Explorerで目的のファイルをを選択した状態で右クリックコピー後に目的のフォルダにペーストする方が楽です。

コンパイルと実行

コンパイルは次のようにします。-cpでlibディレクトリにあるライブラリを指定し、srcディレクトリにあるすべてのファイルを対象とし、-dオプションでbinディレクトリに出力します。

ここで出力されるclassファイルは、package行の記載に沿って階層化されて出力します。src直下にjavaファイルがなく複数のディレクトリに分かれている場合は、スペースで区切って複数指定します。ワイルドカードはパスのセパレータ(/)を含むことができません。

文字コードをMS932のまま保存していたら先に案内したように「-encoding MS932」をコマンド中に含める必要がありますが、ここではUTF-8になっているとして例示します。

javac -cp ./lib/lib.jar -d ./bin ./src/A/*.java ./src/B/*.java

実行時は、-cpにbinデイレクトリを加えて実行します。Windowsで複数のcpを指定する場合は;(セミコロン)で区切りますが、Debian(Linux)の場合は:(コロン)を使います。

java -cp "bin:lib/lib.jar" packege.name.ClassName args

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告