(更新:以下のPeter Nからのコメントに感謝します。)
私はいくつかのクラスを含むJavaパッケージを持っているため、その中にファイルがあります。ただし、最初はこれらのファイルの 1 つだけをコンパイルして、それを使用してパッケージ内の他のクラスを更新できるようにしたいと考えています。これは他のクラスのファクトリであり、結果としてそれらに依存しています。それらへの参照があります。
これを行うためにJavaCompile gradle タスクを使用しようとしています。その結果、JavaCompile のドキュメントを読み、例を検索しようとしましたが、ほとんど出回っていないようです。私はgradle forumsにも投稿しましたが、これまでのところゆっくりと進んでいます。
ant javac タスクを使用して、ant スクリプトで必要なことをすぐに実行できます。しかし、私はgradleでそれをやりたいと思っています(そして、ant.javacメソッドを使用せずに-それをしなければならない場合は、単にantを使用します)。
1 つのパッケージに 2 つのクラスのソース ファイルが 2 つだけ含まれるサンプル ケースを作成しました。
どちらのファイルも some.pkg というパッケージに含まれているため、次のディレクトリ構造になります。
- .\build.gradle
- .\src\main\java\some\pkg\ClassOne.java
- .\src\main\java\some\pkg\ClassTwo.java
クラスワン:
package some.pkg;
import some.pkg.*;
public class ClassOne {
public void doStuff() {
}
}
クラス 2:
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
}
しかし、結果は次のとおりです。
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
では、gradle で同等の ant javac を実現するにはどうすればよいでしょうか。
ant
javac は、他のすべての関連クラスをコンパイルするスマートさを持っているようですが、gradle JavaCompile の場合、それを行うには sourceSet をセットアップする必要があると思います..よくわかりません..
ありがとう!