2017-08-08 64 views
0

我有一個當前使用Gradle版本1.7構建的項目,我試圖遷移到版本4.1,因爲構建速度更快,並且可以並行下載依賴項。不過,我看到一些我不太明白的奇怪行爲。我有一個build.gradle文件,用於幾個覆蓋java插件主類任務的子項目。在它中,它運行一個ant任務,在構建目錄中生成類。JAR任務從Gradle 1.7到4.1的變化

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

這個生成的類作品是輸出我從控制檯獲得

> 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任務生成的類。

我的問題是,Gradle 1.7 - > 4.1之間的行爲似乎已經改變(正如你所期望的那樣),因爲某些原因,當jar任務運行時,我的類內build/classes/main不存檔到該jar,我只是得到一個空白的清單文件。如何使用默認的jar任務將這些使用ant任務生成的類放入Jar中?

回答

0

你爲什麼壓倒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") 
+0

感謝您的輸入。當我嘗試這個gradle時拋出錯誤:ClassesDirs不允許修改。至於爲什麼按照我在問題中提到的方式完成,這是一個多年來一直受到很多人感動的大型項目。嘗試升級Gradle而不會破壞所有內容。 –

相關問題