(は更新:おかげで以下のピーター・Nからのコメントに。)gradleを使って単一のJavaファイルをコンパイルするには?
私はその中のいくつかのクラスので、ファイルをJavaのパッケージを持っています。しかし、最初にこれらのファイルのうちの1つだけをコンパイルして、それを使ってパッケージ内の他のクラスを更新することができます。それは他のクラスのファクトリです。その結果、それらに依存します。それはそれらへの参照を持っています。
私はこのためにJavaCompile gradle taskを使ってみました。その結果、私はJavaCompileのドキュメントを読み、サンプルを検索しようとしましたが、そこにはほとんどないようです。私もgradle forumsに投稿しましたが、これまでのところ遅くなっています。
私は、ant javacタスクを使用してantスクリプトで必要なことを容易に行うことができます。しかし、私はgradleで(そしてant.javacメソッドを使用せずに - 私がそれをしなければならない場合、私はちょうどantを使用します)それをしたいと思います。
1つのパッケージに2つのクラスのソースファイルが2つしかないサンプルケースを作成しました。
両方のファイルは、パッケージと呼ばれるsome.pkgであり、私たちはそれゆえ、次のディレクトリ構造があります。
- を\ build.gradle
- \ SRC \メイン\のJava \一部\ PKG \ ClassOne。 。の.java
- \ SRC \メイン\のJava \一部\ PKG \ ClassTwo.java
ClassOne:
package some.pkg;
import some.pkg.*;
public class ClassOne {
public void doStuff() {
}
}
ClassTwo:
package some.pkg;
import some.pkg.*;
public class ClassTwo {
public void ClassTwo() {
ClassOne cone = new ClassOne();
cone.doStuff();
}
}
あなたが見ることができるように、ClassTwoは(私たちのクラス私たちはスタンドアロンをコンパイルしたい)ClassOneに依存します。
Antスクリプトは、単純なケースである:
<project>
<property name="build.dir" value="build"/>
<property name="lib.dir" value="lib"/>
<property name="src.dir" value="src/main/java"/>
<target name="generate" >
<mkdir dir="${build.dir}"/>
<javac source="1.6" target="1.6" srcdir="${src.dir}" destdir="${build.dir}"
debug="true" includeantruntime="false"
includes="some/pkg/ClassTwo.java">
</javac>
</target>
</project>
しかしGradleの中、私はjavacの(またはJavaCompileタスクが)ClassOneを見つけることができない問題を抱えておきます。それは、sourcedirがどこにあるべきかを指していないかのようです。実際にはコマンドラインでjavacを実行していたようです。私はgradle 'JavaCompile'タスクの 'source'プロパティがant 'srcdir'プロパティのように機能していると考えていましたが、そうではないようです。だからここに私は現在しようとしているのGradleスクリプトです:
apply plugin: 'java'
task compileOne (type: JavaCompile) {
source = sourceSets.main.java.srcDirs
include 'some/pkg/ClassTwo.java'
classpath = sourceSets.main.compileClasspath
destinationDir = sourceSets.main.output.classesDir
}
をしかし、それは、その結果:それでは、どのように私はGradleの中に蟻のjavac同等を達成ん
C:\test\>gradle generate
:generate
C:\test\src\main\java\some\pkg\ClassTwo.java:7: cannot find symbol
symbol : class ClassOne
location: class some.pkg.ClassTwo
ClassOne cone = new ClassOne();
^
C:\test\src\main\java\some\pkg\ClassTwo.java:7: cannot find symbol
symbol : class ClassOne
location: class some.pkg.ClassTwo
ClassOne cone = new ClassOne();
^
2 errors
:generate FAILED
?
ant
javacは行くし、他のすべての関連するクラスをコンパイルする知性を持っているようだが、私はそれをするのsourceSetを設定する必要がありますGradleのJavaCompileのために推測..ないように注意してください。..
感謝!
どのビルドシステムが使用されているかにかかわらず、動作できません。クラスパス上で 'ClassOne'を使って' ClassOne'と 'ClassTwo'を一緒にコンパイルするか、最初に' ClassOne'と 'ClassTwo'をコンパイルする必要があります。また、私はそれらを別々にコンパイルするあなたの動機を理解していません。 –
こんにちは@PeterNiederwieser、どのようなビルドシステムが使用されているにもかかわらず、どういう意味ですか?コマンドラインのjavacと提供されているantのビルドスクリプト_DO_の両方で上記の例が動作することを保証できます。上記のフォルダ構造にファイルをコピーし、antとjavacのコマンドラインを試してみてください。あなたは簡単に動作することがわかります。 (また、私はjavacコマンドラインを更新しました。私が行っていたClassTwo.javaを指定するときに、ClassOne.javaを指定していたことに注意してください) –
さて、私はちょうど別のプレイをしました。私は自分自身を混乱させたのではないかと心配しているantはソースの依存関係ツリー全体をコンパイルしているようですが、ClassTwo.javaのコマンドラインにあるjavacは、ClassOne.javaを最初にやらなければ動作しません。うん、私は自分自身を混乱させたと思う。私はまず自分のテストを確認します。ありがとうございました。 –