簡體   English   中英

JAR任務從Gradle 1.7更改為4.1

[英]Changes in JAR task from Gradle 1.7 to 4.1

我有一個當前使用Gradle 1.7版構建的項目,由於構建速度更快並且可以並行下載依賴項,因此我正嘗試移至4.1版。 但是,我看到了一些我不太理解的奇怪行為。 我有幾個子項目的build.gradle文件,該文件覆蓋了Java插件的主類任務。 它在其中運行一個ant任務,該任務在構建目錄中生成類。

task classes(overwrite: true) {
  inputs.dir project.ext.inputsPath
  outputs.dir "${project.buildDir}/classes/main"
  doLast {
    ant.taskdef(name: 'xmlbean', classname: 'org.apache.xmlbeans.impl.tool.XMLBean', classpath: configurations.compile.asPath)
    ant.xmlbean(srcgendir: "${project.buildDir}/generated-sources/xmlbeans",
                classgendir: "${project.buildDir}/classes/main",
                javasource: '1.5',
                failonerror: true,
                includeAntRuntime: false,
                classpath: project.configurations.compile.asPath) {
        fileset(dir: schemaPath, includes: project.ext.has('inclusionPattern') ? project.ext.inclusionPattern : '*.xsd')
    }
  }
}

這一切都按預期工作,我在{ project_dir }/build/classes/main生成了{ project_dir }/build/classes/main

這是我從控制台獲得的輸出

> Task :my-task:classes
  Putting task artifact state for task ':my-task:classes' into context took 0.0 secs.
  Executing task ':my-task:classes' (up-to-date check took 0.002 secs) due to:
  [ant:xmlbean] Time to build schema type system: 0.616 seconds
  [ant:xmlbean] Time to generate code: 1.512 seconds
  [ant:xmlbean] Compiling 226 source files to E:\Development\my-task\build\classes\main

  [ant:xmlbean] 4 warnings

> Task :my-task:classes
  [ant:xmlbean] Time to compile code: 6.263 seconds

  :my-task:classes (Thread[Task worker for ':' Thread 3,5,main]) completed. Took 8.899 secs.
  :my-task:jar (Thread[Task worker for ':' Thread 3,5,main]) started.

> Task :my-task:jar
  Putting task artifact state for task ':my-task:jar' into context took 0.0 secs.
  Executing task ':my-task:jar' (up-to-date check took 0.004 secs) due to:
  Output property 'archivePath' file E:\Development\my-task\build\libs\my-task.jar has changed.

  :my-task:jar (Thread[Task worker for ':' Thread 3,5,main]) completed. Took 0.012 secs.
  :my-task:install (Thread[Task worker for ':' Thread 3,5,main]) started.

> Task :my-task:install

與先運行ant的任務相比,classes任務似乎運行了兩次(不確定是否有任何區別)。 如前所述,我確實獲得了ant任務生成的類。

我的問題是,由於某種原因,當jar任務運行build / classes / main內部的類時,由於某種原因,Gradle 1.7-> 4.1之間的行為似乎已更改(正如您期望的那樣),我只是得到一個空白的清單文件。 如何使用默認的jar任務將使用ant任務生成的這些類添加到Jar中?

您為什么要覆蓋classes任務? 通常的方法是創建一個附加任務,該任務將寫入新目錄並將其連接到DAG中

例如:

apply plugin: 'java'

task xmlBeanClasses {
   def inclusionPattern = project.ext.has('inclusionPattern') ? project.ext.inclusionPattern : '*.xsd'
   inputs.property 'inclusionPattern', inclusionPattern 
   inputs.dir project.ext.inputsPath
   inputs.dir schemaPath
   outputs.dir "$buildDir/classes/xmlbeans"
   outputs.dir "$buildDir/generated-sources/xmlbeans"
   doLast { 
      // TODO: generate classes in $buildDir/classes/xmlbeans
   }
}

// wire the new task into the DAG
classes.dependsOn xmlBeanClasses

// add the generated classes dir to the "main" classesDirs
// (this dir will now be included in the jar etc)
sourceSets.main.output.classesDirs.add files("$buildDir/classes/xmlbeans")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM