请参阅其他子项目中的自定义jar文件

时间:2016-05-24 13:46:31

标签: java gradle jar

帖子Gradle multiple jars from single source folder讨论了如何生成多个.jar文件。但是,如何依赖多项目构建的其他子项目中的.jar个文件?

例如,假设我有这样的项目结构:

./
├── build.gradle
├── settings.gradle
├── foo/
│   ├── src/
│   │   ├── main/java/
│   │   └── plugins/java/
│   └── build.gradle
└── bar/
    ├── src/main/java/
    └── build.gradle

foo/build.gradle使用此任务构建额外的.jar

sourceSets {
    plugins
}
task pluginsJar(type: Jar) {  
    from sourceSets.plugins.output
}

我可以在bar/build.gradle中放入bar取决于plugins.jar?我试过这样做:

dependencies {
    runtime project(':foo:plugins')
}

但格拉德说:

  

在项目':bar'

中找不到带路径':foo:plugins'的项目

1 个答案:

答案 0 :(得分:1)

您不需要将它们作为jar发布,以将它们作为依赖项。为了使foo成为bar的依赖关系,这就是您所需要的。下面列出了一些方法,具体取决于您需要的配置。请参阅示例下方的链接。

// Compiles for test only
dependencies {
    testCompile project(':foo')
}

// To have the dependency compiled in the project, if you make a stand alow jar then you will need to zip the files in the "Jar" task.
dependencies {
    compile project(':foo')
}

dependencies {
    runtime project(':foo')
}

// 2.13 gradle only - Allow to compile the project and load the jar from a source and add it to the classpath while the application is running
dependencies {
    compileOnly project(':foo')
}

Chapter 23. Dependency Management

编辑:最有效的方法是使用gradles构建的多模块功能。您将能够在主项目中将每个插件作为一个单元进行管理,并能够将每个插件jar作为批量操作或使用不会影响其他插件或主应用程序的特定参数发布。你建立了一个,你可以在基础项目上调用jar任务,并建立所有主题。您可以在应用程序启动时或在运行时动态加载插件。

Chapter 24. Multi-project Builds

以下是两个例子。

RootModule/
  build.gradle
  settings.gradle
  ApplicationModule/
    build.gradle
  Plugin1Module/
    build.gradle
  Plugin2Module/
    build.gradle
  Plugin3Module/
    build.gradle

   Project 1 main application:
    ApplicationModule/
      build.gradle
      settings.gradle

   Project 2 plugins: (dependency on 1 API jar)
   RootModule/
      build.gradle
      settings.gradle
      Plugin1Module/
        build.gradle
      Plugin2Module/
        build.gradle
      Plugin3Module/
        build.gradle     
      Plugin4Module/
        build.gradle
      Plugin5Module/
        build.gradle
      Plugin6Module/
        build.gradle