简体   繁体   中英

Gradle - one project, multiple packages, multiple jars

I'm asking you about a very basic question but I hope you can find the time to help me:

I'm trying to realise a java-project, that can spit out several different programs which partially have dependencies on other projects of mine.

In order to keep it simple, I want to have all the code in one project, run by Gradle, so if I make changes to a central library (the database connector for example) all the child-programs automatically recieve the changes.

An example could look like this:

project:

  • program_A
  • central_library
  • program_B

output:

  • program_A.jar (including central library)
  • program_B.jar (including central library)

Now I'm having serious troubles finding a correct buildscript for this and was wondering if someone here could help me out.

PS : Since I'm new to this, if I should realize this through different modules within the Gradleproject instead of different packages in the Gradleprojects sourcefile, feel free to tell me :)

One way to approach this is to have a root project, that holds the three other projects inside of it.

Specify the sub-projects inside its settings.gradle file:

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

With this in place, program_a can depend on central_library by adding a dependency in its build.gradle :

dependencies {
    compile project(':central_library')
}

I have a similar setup in one of my projects , although the "central library" is the root project and the submodules are test environments.

Create a root directory and put each library or program into its own sub-directory. Create a gradle project in each subproject. You can for example create a skeleton gradle project by running

gradle init --type=java-library

or

gradle init --type=java-application

Then in the root directory create a gradle multi-module project. Basically run only

gradle init

and then create a settings.gradle and list all sub-projects there.

This is actually described very well in the gradle documentation: https://guides.gradle.org/creating-multi-project-builds/

If I understand correctly, what you want to do is, when you change your local projects, you want other projects to see those details. For this you need to publish your projects to some kind of repo, like maven repo. You can do this from command line gradle publishToMavenLocal , or gradle build pTMl . You can also do this in build.gradle file with something like the following:

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM