Gradle:如何在编译后但在将文件打包到Jar之前添加自定义任务?

2022-09-02 21:14:13

我的 build.gradle 目前是:

project(':rss-middletier') {
    apply plugin: 'java'

    dependencies {
        compile project(':rss-core')
        compile 'asm:asm-all:3.2'
        compile 'com.sun.jersey:jersey-server:1.9.1'
        compile group: 'org.javalite', name: 'activejdbc', version: '1.4.9'
    }

    jar {
        from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
            exclude "META-INF/*.SF"
            exclude "META-INF/*.DSA"
            exclude "META-INF/*.RSA"
        }
        manifest { attributes 'Main-Class': 
'com.netflix.recipes.rss.server.MiddleTierServer' }
    }
}

但是,与其直接将这些已编译的类打包到 jar 中,不如先通过运行以下任务来检测它们:

task instrument(dependsOn: 'build', type: JavaExec) {
    main = 'org.javalite.instrumentation.Main'
    classpath = buildscript.configurations.classpath
    classpath += project(':rss-middletier').sourceSets.main.runtimeClasspath
    jvmArgs '-DoutputDirectory=' + project(':rss-middletier').sourceSets
        .main.output.classesDir.getPath()
}

只有在我检测了这些类之后,我才会想将它们打包成一个JAR文件。有没有办法让我在包装之前做这个仪器?

多谢!!!


答案 1

终于想通了办法!

task instrument(type: JavaExec) {
    //your instrumentation task steps here
}
compileJava.doLast {
    tasks.instrument.execute()
}
jar {
    //whatever jar actions you need to do
}

希望这可以防止其他人在这个问题上停留数天:)


答案 2

这与问题中提出的问题有点无关。但想到提到它,认为它可能对某人有所帮助。

我试图用Jar任务之前的类型执行一个任务。Copy

task copyFilesTask(type: Copy) {

   //do whatever you want in here
}

compileJava.dependsOn(copyFilesTask)

jar {
    // jar actions. example below
    //manifest {
    //    attributes 'Main-Class': '<target-class-name-here>'
    //}
}

我在任务之前已经这样做了,因为我需要在创建jar存档时可以使用相关文件。compileJava


推荐