【问题标题】:How to install or publish submodules of gradle project as a jar如何将 gradle 项目的子模块安装或发布为 jar
【发布时间】:2015-09-18 11:04:50
【问题描述】:

我想将我项目的子模块作为 jar 安装到 maven 本地存储库。我搜索了一个用于发布的 gradle 脚本。我发现。但它只安装一个 jar 并且没有子模块类。我该如何继续?

               my-project
               |
               |__subprj1
               |  |__src
               |     |__ com
               |        |__Abc.java
               |   
               |  |__pom.xml
               |__subprj2
               |  |
               |  |__pom.xml
               |
               |__ build.gradle
               |__ publish.gradle

build.gradle:

apply plugin: "java"
        apply from : 'publish.gradle'

        ext {
            GROUPID = "my-project"
            VERSION = "1.0.0"
            robovmVersion = "1.5.0"
            androidVersion = "4.4"
            gwtVersion = "2.6.0"
            jglfwVersion = "1.1"
            lwjglVersion = "2.9.2"
            jlayerVersion = "1.0.1-gdx"
            jorbisVersion = "0.0.17"
            junitVersion = "4.11"
        }

        buildscript {
            repositories { mavenCentral() }
            dependencies {
                classpath "com.android.tools.build:gradle:1.2.3"
                classpath "org.robovm:robovm-gradle-plugin:1.5.0"
            }
        }

        configure(allprojects - project('...'')) {
            apply plugin: "eclipse"
            apply plugin: "idea"
            apply plugin: "java"

            compileJava.options.encoding = 'UTF-8';

            repositories {
                mavenCentral()
                maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
            }

            group = GROUPID
            version = VERSION

            // set source Java version
            sourceCompatibility = 1.6
            targetCompatibility = 1.6
            sourceSets.main.java.srcDirs = ["src"]
            sourceSets.main.resources.srcDirs = ["src"]

            // create a custom configuration for local dependencies such as Android runtime
            configurations {
                optional
                compile.extendsFrom optional
            }
        }

        project("...) {

        }


        if (JavaVersion.current().isJava8Compatible()) {
            allprojects {
                tasks.withType(Javadoc) {
                    options.addStringOption("Xdoclint:none", "-quiet")
                }
            }
        }

        task fetchNatives << {
            ant.importBuild "fetch.xml"
            fetch.execute()
            copy.execute()
        }

publish.gradle:

    apply plugin: 'maven'
    apply plugin: 'signing'

    group = 'my-project'
    version = '1.0.0'
    ext.packaging = 'jar'

    def isDevBuild
    def isCiBuild
    def isReleaseBuild

    def sonatypeRepositoryUrl

    //set build variables based on build type (release, continuous integration, development)
    if(hasProperty("release")) {
        ...
    } else if (hasProperty("snapshot")) {
        ...
    } else {
        isDevBuild = true
        println "Performing local build"
    }

    repositories {
        mavenCentral()
    }

    task artifactDocs(type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from 'build/docs/javadoc'
    }

    task artifactSources(type: Jar) {
        from sourceSets.main.allSource
        classifier = 'sources'
    }

    artifacts {
        archives jar
        archives artifactDocs
        archives artifactSources
    }

    if(isReleaseBuild) {
        signing {
            sign configurations.archives
        }
    } else {
        task signArchives {
            // do nothing
        }
    }

    uploadArchives {
        repositories {
            if (isDevBuild) {
                mavenLocal()
            }
        }
    }

【问题讨论】:

  • 可以尝试让你的 subprj1 和 subprj2 gradle-subprojects 用于 my-project,然后它们都有自己的 build.gradle 文件,并且可以从 parens 构建脚本轻松执行

标签: java gradle installation publish


【解决方案1】:

首先,您的子模块必须作为 g​​radle 子项目处理。所以你必须为它们创建 build.gradle 文件,并通过 settings.gradle 文件将它们包含在根项目中。

其次,在每个子项目的 build.gradle 文件中,你可以定义你的部署代码。要在本地 maven 存储库 ($HOME/.m2) 中安装一些东西,我使用 gradle maven 插件。正确配置后,我在这个子项目上运行安装:

gradle subproject1:install

这里是这样一个子项目的示例配置以在本地安装它:

apply plugin: 'maven'
...
group = 'com.example.subproject2'

configurations {
    deployerJars
}

dependencies {
    ... 
    deployerJars "org.apache.maven.wagon:wagon-http:2.2"
}
...
def installer = install.repositories.mavenInstaller

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-19
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2018-07-11
    • 2014-02-20
    相关资源
    最近更新 更多