かつてreddit.comのトピック「IDE を使用せずに Java をコンパイルおよび実行する」で、パッケージ内にある Java ファイルのグループを別のフォルダー ( binと呼びます)にコンパイルするコマンドはありますかという質問がありました。では、新しいクラス ファイルを開始するにはどうすればよいでしょうか? " トピックの作成者であるkylolink は次のように説明しています。「Java を使い始めたとき、私はすべてのコンパイルを Eclipse に頼っていましたが、コードを書くことだけを心配していました。」 この質問は何度も見てきましたが、実際、これはGPS システムと IDE についてブログに投稿するきっかけは何ですか: 良いのか悪いのか? 私は強力な最新の Java IDE が大好きで、日々の生活を楽にしてくれますが、Java を使わずに単純なサンプル Java を構築して実行する方法を知ることにも利点があります。この投稿は、まさにその方法についてです。単純なテストによる Java の学習に関する私のブログで、私が時々、単純なテキスト エディターとコマンド ライン ツールを使用して、単純なアプリケーションを作成、構築、実行するのが好きであることについて書きました。私のお気に入りの Java IDE がどれくらいの「オーバーヘッド」を必要とするかについてはかなり良い考えが得られ、フレームワークを使用することで得られる利点が「オーバーヘッド」を正当化するのに十分であるかどうかを早期に決定できます。実際のアプリケーションのほとんどでは、VL IDE が非常に価値があることに疑いの余地はありません。ただし、最も単純なサンプル アプリケーションでは、これが常に当てはまるとは限りません。この記事の残りの部分では、このような状況で IDE を使用せずに Java コードをビルドして実行する方法を示します。
Java コードの作成と実行
例をよりわかりやすくするために、合成または継承を通じて相互に関連しており、dustin.examplesという同じパッケージ内にある非常に単純な Java クラスをいくつか使用します。2 つのクラスには関数がありません。3 番目のクラス Main.java には、 IDE を使用せずにクラスを実行する方法を示すmain
関数があります。main
以下は、これら 3 つのクラスのコードです。 Parent.java
package dustin.examples;
public class Parent
{
@Override
public String toString()
{
return "I'm the Parent.";
}
}
Child.java
package dustin.examples;
public class Child extends Parent
{
@Override
public String toString()
{
return "I'm the Child.";
}
}
メイン.java
package dustin.examples;
import static java.lang.System.out;
public class Main
{
private final Parent parent = new Parent();
private final Child child = new Child();
public static void main(final String[] arguments)
{
final Main instance = new Main();
out.println(instance.parent);
out.println(instance.child);
}
}
次のスクリーンショットは、これらの.javaクラスを含むディレクトリ構造を示しています。このスクリーンショットは、ソース ファイルがパッケージ名 (パッケージ情報がdustin.examplesであるため、 dustin/examples ) を表すディレクトリ階層にあり、このパッケージがディレクトリ階層を反映していることを示しています。はサブディレクトリ SRC の下にあります。また、コンパイルされた.classファイルを格納するためのクラス サブディレクトリ (現在は空です) も作成しました。これにより、このディレクトリが存在しない場合、 Javac はこのディレクトリを作成しなくなります。
JAVAC で構築し、Java で実行する
Java コードの作成にどのようなアプローチ (Ant、Maven、Gradle、IDE) を使用しても、最終的には JAVAC になります。Oracle/Sun が提供する JAVAC コマンド ライン ツールの標準オプションは JAVAC -help を実行すると表示され、追加の拡張オプションは JAVAC -help -X を実行すると表示されます。これらのオプションの使用方法の詳細については、Windows または Unix/Linux 用の JAVAC ツールのドキュメントを参照してください。Javac のドキュメントに記載されているように、-sourcepath オプションを使用して、ソース ファイルが存在するディレクトリを表現できます。上のスクリーンショットに示されているディレクトリ構造では、 C:\Java\examples\javacAndJava\ ディレクトリから JAVAC コマンドを実行していると仮定すると、コマンドに次のようなものを含める必要があることを意味します。Javac -sourcepath src SRC\Dustin\examples\*。ジャワ。次のスクリーンショットは、この結果を示しています。 .classファイルのディレクトリを指定しなかったため、デフォルトでは、それらのファイルが作成されたソース.javaファイルと同じディレクトリに配置されます。この状況を修正するオプションを使用できます。このコマンドは、たとえばJavac -sourcepath src -d classsrc\Dustin\examples\* として実行できます。私、あなた。前述したように、選択したフォルダー (クラス) はすでに存在している必要があります。これが発生すると、次のスクリーンショットに示すように、コマンドは指定されたフォルダーに .classファイルを配置します。指定されたディレクトリ内の対応する.classファイルにコンパイルされた Java ソース ファイルを使用すると、アプリケーションのクイック起動メニューを使用してアプリケーションを起動できます。 Javaコマンドラインツール。これは、Java ヘルプまたは Java ツール ページに記載されている指示に従い、( または) オプションを使用して.classファイルの場所を指定するだけで実行できます。両方の方法を使用して.classファイルを検索するクラス ディレクトリを指定する方法を、次のスクリーンショットに示します。最後の引数は、実行される main 関数を持つクラスの完全 (Java パッケージ全体) 名です。次のスクリーンショットに示されているコマンドは、javaclasses-cpdustin.examples.Main と javaclasses-classpathdustin.examples.Main です。-d
-classpath
-cp
Ant を使用した構築と実行
最も単純な Java アプリケーションの場合、先ほど説明したように、JAVAC と Java を使用してそれぞれアプリケーションを作成および実行するのは非常に簡単です。アプリケーションが少し複雑になると (たとえば、複数のパッケージ/ディレクトリにコードが存在したり、サードパーティのライブラリやフレームワーク上のより複雑な依存関係クラスが存在したり)、このアプローチは扱いにくくなる可能性があります。Apache Ant は、「ビッグ 3」Java ビルド ツールの中で最も古く、何千ものアプリケーションや展開で使用されています。以前のブログ投稿で述べたように、非常にシンプルな Ant ビルド ファイルは、特にこの投稿で説明したようなテンプレートから開始する場合、簡単に作成できます。次のコード リストは、Ant のbuild.xmlファイル用です。これを使用して、.javaファイルを .class ファイルに合成し、上記の JAVAC および Java で実行したように、 dustin.examples.Mainクラスを実行できます。 ビルド.xml<?xml version="1.0" encoding="UTF-8"?>
<project name="BuildingSansIDE" default="run" basedir=".">
<description>Building Simple Java Applications Without An IDE</description>
<target name="compile"
description="Compile the Java code.">
<javac srcdir="src"
destdir="classes"
debug="true"
includeantruntime="false" />
</target>
<target name="run" depends="compile"
description="Run the Java application.">
<java classname="dustin.examples.Main" fork="true">
<classpath>
<pathelement path="classes"/>
</classpath>
</java>
</target>
</project>
この例をできるだけ単純にし、JAVAC と Java を使用した前の例に近づけるために、Ant プロパティを使用せず、通常含める共通の目標 (「純粋」や「Javadoc」など) も含めませんでした。 。JAVAC Ant タスクの「debug」を「true」に設定して有効にしたことにも注意してください。これは、Ant が失敗した場合には true ではありませんが、JAVAC のデフォルトでは true になるためです。当然のことながら、Javac タスクと Java Ant タスクは JAVAC コマンド ツールと Java に似ています。デフォルト名を使用したため、明示的に指定されていない場合 (build.xml)、Ant はビルド ファイルを期待します。また、このビルドの「デフォルト」として「Run」ターゲットを指定し、依存関係の実行として「compile」を含めたためです。 「Run」ターゲットであり、Ant が環境のパス上にあったため、コマンド ラインで行う必要があるのは、Ant を取得して、build.xml ファイルのあるディレクトリ内の Ant サンプルをコンパイルして実行することだけでした。これは次のスクリーンショットに示されています。 Ant を使用した単純な Java アプリケーションのコンパイルと実行を実証しましたが、私は Ant でのみコンパイルし、Java (またはクラスパスが重い場合は Java を呼び出すスクリプト) で実行する傾向があります。
Maven を使用した構築と実行
Ant は最初のコア Java ビルド ツールでしたが、Apache Maven は、主に規約ベースの構成の採用と共有ライブラリ リポジトリのサポートにより、最終的にその名声を博しました。コードと生成されたオブジェクトが標準のディレクトリ レイアウトに従っている場合、Maven は使いやすくなります。残念ながら、私の例はこのディレクトリ構造に従っていませんが、Maven を使用すると、予想されるデフォルトのディレクトリ構造をオーバーライドできます。次のリストは、ソース ディレクトリとターゲット ディレクトリの代わりに使用される Maven POM ファイルのコードであり、Maven 3.2.1 を使用した Maven ビルドに最低限必要なその他の要素を提供します。 pom.xml<project>
<modelVersion>4.0.0</modelVersion>
<groupId>dustin.examples</groupId>
<artifactId>CompilingAndRunningWithoutIDE</artifactId>
<version>1</version>
<build>
<defaultGoal>compile</defaultGoal>
<sourceDirectory>src</sourceDirectory>
<outputDirectory>classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
</build>
</project>
上記のpom.xmlファイルは「compile」の「defaultGoal」を定義しており、pom.xmlファイルは Maven 実行可能ファイル (MVN) が検索するデフォルトの POM カスタムであり、Maven インストール bin ディレクトリが私のパス上にあるため、次のスクリーンショットに示すように、「MVN」を実行して .class ファイルをコンパイルする必要があります。 Mvn Exec コマンド Java -Dexec.mainClass =dustin.examples.Mainを使用して、Maven からコンパイルされたアプリケーションを実行することもできます。これは次のスクリーンショットで確認できます。 Ant と同様に、私は単純な Java アプリケーションを実行するのに Maven を使用するのではなく、コンパイルされたコードで Java を使用する (または、長時間実行されるクラスで Java を直接呼び出すスクリプトを使用する) 傾向があります。
Gradle を使用した構築と実行
Gradle は、3 つの主要な Java ビルド ツールの中で最も最新で、最もトレンディーで、スタイリッシュです。私は流行の本質について懐疑的なことがありますが、Gradle については気に入っている点がたくさんあります (XML ではなく Groovy で書かれている、組み込みの Ant サポート、組み込みの Ivy サポート、規約に従った構成が簡単であるなど)再構成、Maven リポジトリのサポートなど)。次の例は、単純なアプリケーションをコンパイルして実行するために使用できる Gradle ビルドを示しています。これは、この投稿のメインのサンプル コードです。この適応例を Simple Gradle Java Plugin Customization ブログで紹介しました。 build.gradleapply plugin: 'java'
apply plugin: 'application'
// Redefine where Gradle should expect Java source files (*.java)
sourceSets {
main {
java {
srcDirs 'src'
}
}
}
// Redefine where .class files are written
sourceSets.main.output.classesDir = file("classes")
// Specify main class to be executed
mainClassName = "dustin.examples.Main"
defaultTasks 'compileJava', 'run'
build.gradleファイル の最初の 2 行は、Java プラグインとアプリケーション プラグインの使用を示しており、その結果、一連の機能がこのビルドに自動的に組み込まれます。"sourceSets" と "sourceSets.main.output.classesDir" を定義すると、Java ソース コードとコンパイルされたバイナリ クラスの Gradle プラグインのデフォルト Java ディレクトリをそれぞれオーバーライドできます。アプリケーション プラグイン。「defaultTasks」行は、コマンド ラインに「Gradle」と入力するだけで実行されるタスクを定義します。「compileJava」は Java プラグインによって提供されるデフォルト タスクで、「Run」はアプリケーション プラグインによって提供されるデフォルト タスクです。アセンブリに build.gradle という名前を付け、デフォルトのタスクを「compileJava」と「Run」に指定したため、パスに Gradle インストールの bin ディレクトリがあるため、サンプルをビルドして実行するために必要な作業は次のように入力するだけでした。 「Gradle」。これは次のスクリーンショットに示されています。 最も懐疑的な人でも、この単純な例では Gradle ビルドが非常に滑りやすいことを認めざるを得ません。これは、特定の規則や前提に依存する簡潔さと、必要に応じてデフォルトをオーバーライドするための非常に簡単なメカニズムを組み合わせたものです。XML ではなく Groovy であることも非常に魅力的です。Ant や Maven と同様に、私はこれらのツールのみを使用してビルドする傾向があり、コンパイルされた .class ファイルを Java または Java を呼び出すスクリプトから直接実行する傾向があります。ちなみに、私はこれらの .classes を起動用に jar にアーカイブする傾向がありますが、それはこの記事の範囲を超えています。
GO TO FULL VERSION