2

eclipseワークスペース内に5つの通常のJavaプロジェクトがあり、Mavenリポジトリとして存在するライブラリと存在しないライブラリの両方に相互依存関係と外部jar依存関係があります。

Eclipse内ではすべてが正常に機能していますが、実行する必要のある2つのタスクがあります。

1)すべてを実行可能なjarにパッケージ化して、別のコンピューターにアップロードして、同じEclipse環境をセットアップしなくても実行できるようにします。私はgradle/mavenを見てきましたが、そのような「複雑な」ものが必要かどうかわかりません。これらのツールを使用するには、ワークスペースのセットアップを変更する必要があるようですが、間違っている可能性があります。

2)すぐに2つのJavaプロジェクトのコードをGoogleコードでホストしたいので、ワークスペースはそのタスクをスムーズにする方法で構造化する必要があります。

それらが何らかの方法で相互作用するかどうかわからないので、私は両方のタスクに言及しています。

どうすればこれをうまく解決できますか?前もって感謝します。

4

1 に答える 1

2

あなたの説明は、Gradle のマルチプロジェクト サポートと Eclipse およびアプリケーション プラグインにぴったりのように思えます。これは、私がどのようにアプローチするかの簡単な例です。

プロジェクトは同じ Eclipse ワークスペースにある場合がありますが、必ずしも同じフォルダーの下にあるとは限りません。そのため、次のディレクトリ構造はプロジェクトを自由に移動できることを前提としていることに注意してください。

|-- component1
|-- component2
`-- myRunnableApp

最初のステップは、最上位の build.gradle ファイルと settings.gradle を作成することです。

|-- build.gradle
|-- settings.gradle
|-- component1
|-- component2
`-- myRunnableApp

settings.gradle は、サブディレクトリをサブプロジェクトとして扱うように gradle に指示します。

include ':component1', ':component2', ':myRunnableApp' 

build.gradle には、すべてのサブプロジェクトに共通の設定が含まれます。この特定のケースでは、java および eclipse プラグインを適用します。

subprojects {

  apply plugin: 'eclipse'
  apply plugin: 'java'

  repositories {
    mavenCentral()
  }
}

を発行してEclipseプロジェクトを生成するには、これで十分ですgradle eclipse。次に、プロジェクト間の依存関係を次のように宣言します。

component1/build.gradle

dependencies {
    // declare your 3rd party jar dependencies as needed
    compile 'group:artifact:version'
}

プロジェクト間の依存関係を宣言できるようになりました。これは、生成時に Eclipse プロジェクト ファイルに反映されます。

component2/build.gradle

dependencies {
    compile project(':component1')
}

最後に、アプリケーション プラグインを実行可能なプロジェクトに適用します。UnixおよびWindows用のラッパーsh / batファイルとともにjarファイルを生成します。

myRunnableApp/build.gradle

apply plugin: 'application'

mainClassName = 'my.custom.app.Main'

dependencies {
    // component 1 is a transitive dependency of component 2
    compile project(':component2')
}

以上です!これは、独自のビルドを展開するための良い出発点になると思います。マルチプロジェクト ビルド、Java プラグイン、アプリケーション プラグイン、および依存関係管理に関する gradle ドキュメントを確認してください。

それが役立つことを願っています!

于 2012-11-01T18:42:45.123 に答える