Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gradle:如何在编译之后但在将文件打包到Jar之前添加自定义任务?_Java_Jar_Gradle_Build.gradle_Activejdbc - Fatal编程技术网

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

Java Gradle:如何在编译之后但在将文件打包到Jar之前添加自定义任务?,java,jar,gradle,build.gradle,activejdbc,Java,Jar,Gradle,Build.gradle,Activejdbc,My 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.java

My 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文件中。有没有一种方法可以让我在包装前完成这项工作


非常感谢

终于想出了办法

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

希望这可以避免其他人在这一问题上陷入困境:)

这与问题中的问题有点无关。但我想通过思考它可能对某人有所帮助来提及

我试图在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>'
    //}
}
任务复制文件任务(类型:复制){
//在这里你想干什么就干什么
}
compileJava.dependsOn(复制文件任务)
罐子{
//jar操作。下面的示例
//显示{
//属性“主类”:“
//}
}

在执行
compileJava
任务之前,我已经这样做了,因为我需要在创建jar归档时提供相关文件。

下面是一个Gradle项目示例:。如果执行:
gradle clean build jar
,它将生成一个jar文件,其中包含插入指令的类使用配置{jar},然后是jar.doFirst{dependsOn instrument}