2

私はJavaの世界とGradleが初めてです。複数のプラットフォーム (Android、Linux、および Windows) をサポートする JSerial lib を作成しました。

ターゲットとするプラットフォームを選択できるようにするために、JSerial gradle ファイルにいくつかの sourceSet を定義しました。

sourceSets {
    windows {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
    linux {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}

dependencies {
    linuxCompile 'net.java.dev.jna:jna:4.1.0'
    linuxCompile 'net.java.dev.jna:jna-platform:4.1.0'
    windowsCompile 'net.java.dev.jna:jna:4.1.0'
    windowsCompile 'net.java.dev.jna:jna-platform:4.1.0'
}

デフォルトのmainsourceSets は共通インターフェースなどを構築します。その後、windowssourceSet は Windows 実装を構築します (Linux と Android も同様です)。

このライブラリを使用し、gradle を使用して依存するプロジェクトを作成しますincludeFlat。私のgradleファイルの依存部分は次のとおりです。

dependencies {
    compile project(':JSerial')
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

これは機能します。しかし、このプロジェクトは Windows アプリケーションなので、「windows」sourceSet に依存したいと思います。私は次のことを試しました:

dependencies {
    compile project(':JSerial').sourceSets.windows.output
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

しかし、うまくいきません。次のエラーがあります。

SourceSet コンテナにプロパティ 'windows' が見つかりませんでした。

どうしたの ?

PS: sourceSets を使用せずに私が試みていることを行うためのより良い方法がある場合は、教えてください!

4

1 に答える 1

1

私はついにエレガントだと思う解決策を見つけました。使用する代わりに、sourceSetsマルチプロジェクトを使用しました。これが私のプロジェクトです:

Serial/
  build.gradle
  src/main/java/com.package/
    SerialPort.java
  windows/
    build.gradle
    src/main/java/com.package/
      SerialPortWindows.java

Application/
  build.gradle
  settings.gradle

Applicationの中でsettings.gradle

includeFlat 'Serial'
includeFlat 'Serial/windows'

Applicationの中でbuild.gradle

dependencies {
     project(':Serial/windows')
}

Serial/windowsbuild.gradleSerialPortコンパイルするためのインターフェースが必要です):

dependencies {
     project(':Serial')
}

次に、アプリケーションをビルドすると、Serial/windowswhich requires が必要になりますSerialbuild.gradleアプリケーション用に複数のファイル (たとえば、Linux 用と Windows 用など) を異なる依存関係で定義できると思います。

于 2015-09-04T14:39:35.210 に答える