如何从特定的类创建JAR并将其与Gradle结合使用?

时间:2019-05-15 13:15:56

标签: java gradle

我想在不同项目中使用的Java类很少。

我现在不想在一个专用项目中移动这些类。

所以我想用这些类构建一个JAR,并能够在我的其他项目中使用Gradle。

因此,这里是我的JAR任务(源),我将其发布为工件:

task utilitiesJar(type: Jar) {
    baseName = 'utilities'
    version =  '0.0.1'
    includeEmptyDirs = false
    from sourceSets.main.allJava
    include "**\\common\\exceptions\\**"
    include "**\\common\\json\\**"
    include "**\\common\\logging\\**"
}

publishing {
    publications {
        utilities(MavenPublication) {
            artifact utilitiesJar
            groupId group
            artifactId utilitiesJar.baseName
            version utilitiesJar.version
        }
    }
    repositories {
        maven {
            url 'my_URL'
        }
    }
}

我通过另一个项目将其收回:

repositories {
    mavenCentral()

    maven {
        url 'my_URL'
    }
}

...
compile (...)
...

似乎已正确导入JAR(我可以在IntelliJ的“外部库”及其所有类中看到它),但不能使用它。 也许是因为.class文件丢失了? 我是Java的初学者,也许我错过了一些东西。

如何仅使用某些类创建JAR,然后使用它?

1 个答案:

答案 0 :(得分:0)

好吧,正如评论中所说,我必须包括构建的.class文件,我不能使用像这样的外部.java类。

所以我的解决方案:

def utilitiesName = '...'
def utilitiesVersion = '0.0.1'

task utilitiesJar(type: Jar, dependsOn: classes) {
    baseName = utilitiesName
    version =  utilitiesVersion
    includeEmptyDirs = false
    from sourceSets.main.output
    include ("**\\common\\exceptions\\**\\*", "**\\common\\json\\**\\*", "**\\common\\logging\\**\\*")
}

task utilitiesSourcesJar(type: Jar, dependsOn: classes) {
    baseName = utilitiesName
    version =  utilitiesVersion
    classifier = 'sources'
    includeEmptyDirs = false
    from sourceSets.main.allJava
    include ("**\\common\\exceptions\\**\\*", "**\\common\\json\\**\\*", "**\\common\\logging\\**\\*")
}

publishing {
    publications {
        utilities(MavenPublication) {
            artifact utilitiesJar
            artifact utilitiesSourcesJar
            groupId group
            artifactId utilitiesName
            version utilitiesVersion
        }
    }
    repositories {
        maven {
            url 'myURL'
        }
    }
}

现在我可以使用它并在IDE中查看类。

PS:用这种方式做是很脏的。创建一个子项目/一个模块,这只是方法,最后就是我所做的。