当前位置: 首页 > 知识库问答 >
问题:

gradle-生成后复制文件

夏侯野
2023-03-14


我尝试构建jar,然后将其复制到另一个文件夹。

task createJar(type: Jar) {
    archiveName = "GradleJarProject.jar"
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',  
            'Implementation-Version': version,
            'Main-Class': 'me.test.Test'
    }
    baseName = project.name
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar

}

task copyJarToBin {
    copy {
        from 'build/libs/GradleJarProject.jar'
        into "d:/tmp"
    }
}

task buildApp (dependsOn: [clean, createJar, copyJarToBin])

如果我删除项目中的 /build文件夹并运行build dApp()任务,任务createJar()将生成. jar文件,但CopyJarTobin()将找不到该. jar文件。

你能帮我吗?
谢谢。

共有3个答案

卫嘉泽
2023-03-14

只是对上述答案做了一些更正:

jar {
    baseName = "$artifactId"
    version =  '0.0.1'
}

task copyJar(type: Copy) {
    from jar // copies output of file produced from jar task
    into 'destination-folder'
}

build.finalizedBy copyJar
傅和璧
2023-03-14

我认为上面的答案有点过时了。下面是使用gradle 3.3的答案

jar {
    baseName = 'my-app-name'
    version =  '0.0.1'
}

task copyJar(type: Copy) {
    from jar // here it automatically reads jar file produced from jar task
    into 'destination-folder'
}

build.dependsOn copyJar
蓟和煦
2023-03-14

罪魁祸首是你的CopyJarTobin任务。做的时候

task copyJarToBin {
    copy {
        from 'build/libs/GradleJarProject.jar'
        into "d:/tmp"
    }
}

在配置期间使用复制方法复制jar。(请参阅https://docs.gradle.org/current/userguide/userguide_single.html#sec的gradle用户指南:build_phases了解构建生命周期)您想在执行阶段(任务的执行)运行实际的复制操作。

解决这个问题的一种方法是将copy方法的调用移动到doLast块中:

task copyJarToBin {
    doLast {
        copy {
            from 'build/libs/GradleJarProject.jar'
            into "d:/tmp"
        }

    }
}

这种方法的问题是,即使文件没有更改,您也无法受益于gradles增量构建功能并在每次执行任务时复制该文件。

编写CopyJarTobin任务的一种更好、更惯用的方法是更改任务实现以使用Copy任务类型:

task copyJarToBin(type: Copy) {
    from 'build/libs/GradleJarProject.jar'
    into "d:/tmp"
}   

我们甚至可以利用gradle的自动连接功能来改进这个片段。您可以将一个任务的输出声明为另一个任务的输入。因此,不要编写“build/libs/GradleJarProject”。“你可以简单地做:

task copyJarToBin(type: Copy) {
    from createJar // shortcut for createJar.outputs.files
    into "d:/tmp"
}   

现在您无需担心任务排序,因为gradle知道必须先执行createJar任务,然后才能执行copJarTobin任务。

 类似资料:
  • 问题内容: 我尝试构建jar,然后将其复制到另一个文件夹。 但是我找不到一个问题。copyJarToBin任务尝试复制旧的jar。如果我删除项目中的/ build文件夹并运行buildApp()任务,则任务createJar()将生成.jar文件,但copyJarToBin()找不到该.jar文件。 你可以帮帮我吗? 谢谢。 问题答案: 罪魁祸首是您的任务。做的时候 您可以在配置期间使用该方法复制

  • 我正在为unity开发一个android插件,需要生成一个jar文件。为此,我遵循https://stackoverflow.com/a/20446513/3742608中的步骤,将构建变体设置为release,重建项目并执行MakeJar。然而,我的项目确实有gradle只在另一个文件夹“中间”中使用的文件夹: 我将一些内容更改为以下内容,但没关系,不会生成jar文件。 bundles/rele

  • 我正在使用gradle构建我的项目,使用以下build.gradle文件: 当我输入gradle build命令时,我希望gradle在生成后执行一个任务。 我在网上找到了一个,我尝试了多种方法都失败了。 如果你知道怎么做,请告诉我。

  • 为了学习JavaFX,我使用IntelliJ IDEA创建了我的第一个项目,并将该项目导出为Eclipse项目。当我在这两个IDE中运行项目时,一切都运行得很好。不幸的是,在构建项目并尝试运行.jar或.exe文件之后,我得到了一个异常,我认为问题出在FXMLLoader中,它无法找到fxml文件。 项目层次结构

  • 这是我项目的build.gradle文件。 这里我尝试使用gradle Build从ubuntu终端生成apk文件。 但Gradle生成失败....... 我没有Android Studio 我只有Android SDK。 我的主要任务是在启动android Studio时生成apk文件。 来自终端 ./gradlw使用此cmd汇编调试。 这是我的日志....... > 错误:配置项目“:App”

  • 我是格拉德尔的新手。我正在尝试从我的构建中构建Dockerfile。格拉德尔 任务“:buildDocker”的执行失败。Docker执行失败的命令行[Docker build-t 73299472920.dkr.ecr.us-east-1.amazonaws.com/camunda:0.0.0.uncommitted-71119c2/Users/amx/Code/backend/jclaim/b