Javacを使用して、Unix上のすべてのサブフォルダーにあるすべてのJavaファイルをコンパイルする方法は?
Ant または Maven などのビルドツールを使用します。どちらの方法でも、依存関係を管理することができます。たとえば、 find
UNIXツール。 AndとMavenのどちらでも、コンパイルに加えて実行するカスタムタスクを定義できます。さらに、Mavenには、リモートリポジトリで外部依存関係を管理するための規則、および継続的な統合をサポートするユニットテストと機能を実行するための規則が付属しています。
たまにソースファイルをコンパイルする必要がある場合でも、単純なAnt build.xml
ファイルは、最終的には大幅な時間の節約になります。
最後に、人気のあるIDEおよびコードエディタアプリケーションのほとんどは、Antビルドスクリプトと何らかの統合が行われているため、エディタ内からすべてのAntタスクを実行できます。 NetBeans =、 Eclipse 、 [〜#〜] idea [〜#〜] など、Mavenのサポートが組み込まれています。
Antが初めての場合は、最初に this を読んでください。以下は、リンクからのビルドファイルの例です。
<project name="MyProject" default="dist" basedir=".">
<description>
simple example build file
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init"
description="compile the source " >
<!-- Compile the Java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
Antに慣れると、Mavenに移行するのが簡単になります。
Windowsの場合...
バッチファイルを作成します。
for /r %%a in (.) do (javac %%a\*.Java)
...次に、最上位のソースフォルダで実行します。
Linuxの場合...
javac $(find ./rootdir/* | grep .Java)
このスレッドから取られた両方の答え...
http://forums.Oracle.com/forums/thread.jspa?threadID=1518437&tstart=15
しかし、他の人が示唆したように、ビルドツールはおそらく役立つでしょう。
それが最善の方法かどうかはわかりませんが、これはうまくいくはずです:
find . -name "*.Java" | xargs javac
Ant を使用して、必要な数のソースフォルダをコンパイルするスクリプトを記述します。
別の(柔軟性が低い)方法、フォルダレベルの数がわかっている場合:
javac *.Java */*.Java */*/*.Java */*/*/*.Java */*/*/*/*.Java ...
シェルによっては、shopt -s nullglob
を使用したbashで、一致しないパターンを何にも拡張しないように設定する必要がある場合があります。たとえば、次のシェル関数を使用して、Javaファイル内のテキストを検索します。
function jgrep ()
{
(
shopt -s nullglob
egrep --color=ALWAYS -n "$@" *.tex *.Java */*.Java */*/*.Java */*/*/*.Java */*/*/*/*.Java */*/*/*/*/*.Java
)
}
jgrep String
しかし実際には、他の人が言ったように、ビルドツールを使用してください。