Gradle - 一个项目,多个包,多个罐子

时间:2017-10-06 08:20:13

标签: java intellij-idea gradle project-setup

我问你一个非常基本的问题,但我希望你能抽出时间帮助我:

我试图实现一个java项目,它可以吐出几个不同的程序,这些程序部分依赖于我的其他项目。

为了简单起见,我希望将所有代码放在一个项目中,由Gradle运行,所以如果我对中央库(例如数据库连接器)进行更改,所有子程序会自动收到更改

示例可能如下所示:

项目:

  • program_A
  • central_library
  • PROGRAM_B

输出:

  • program_A.jar(包括中央图书馆)
  • program_B.jar(包括中央图书馆)

现在我遇到了严重的麻烦,为此找到了正确的buildcript,并且想知道这里是否有人可以帮助我。

P.S。 :由于我是新手,如果我应该通过Gradleproject中的不同模块而不是Gradleprojects源文件中的不同包来实现这一点,请随时告诉我:)

3 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是拥有一个根项目,该项目包含其中的三个其他项目。

settings.gradle文件中指定子项目:

rootProject.name = 'RootProject'
include 'program_A'
include 'central_library'
include 'program_B'

有了这个,program_a可以通过在central_library中添加依赖项来依赖build.gradle

dependencies {
    compile project(':central_library')
}

我在my projects之一中设置了类似的设置,尽管"中央库"是根项目,子模块是测试环境。

答案 1 :(得分:0)

创建根目录并将每个库或程序放入其自己的子目录中。 在每个子项目中创建一个gradle项目。 例如,您可以通过运行

创建骨架gradle项目
gradle init --type=java-library

gradle init --type=java-application

然后在根目录中创建一个gradle多模块项目。基本上 只运行

gradle init

然后创建一个settings.gradle并列出那里的所有子项目。

这实际上在gradle文档中有很好的描述: https://guides.gradle.org/creating-multi-project-builds/

答案 2 :(得分:0)

如果我理解正确,您要做的是,当您更改本地项目时,您希望其他项目查看这些详细信息。为此,您需要将项目发布到某种回购,例如maven repo。您可以从命令行gradle publishToMavenLocalgradle build pTMl执行此操作。您也可以在build.gradle文件中执行以下操作:

    task sourceJar (type : Jar) {
        classifier = constants.extSources
        from sourceSets.main.allSource
    }

    publications {
         mavenJava(MavenPublication) {
             from components.java
             artifact(sourceJar) {
                 classifier "sources"  //classifier = constants.extSources
            }
        }
    }