首页 文章

JAR任务从Gradle 1.7到4.1的变化

提问于
浏览
0

我有一个目前使用Gradle 1.7版本构建的项目,我正在尝试迁移到4.1版本,因为构建速度更快,并且可以并行下载依赖项 . 但是,我看到一些我不太了解的奇怪行为 . 我有一个build.gradle文件,用于覆盖java插件的主类任务的几个子项目 . 在它中它运行一个ant任务,在build目录中生成类 .

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运行的任务 . 如前所述,我确实得到了ant任务生成的类 .

我的问题是Gradle 1.7 - > 4.1之间的行为似乎已经改变了(正如你所期望的那样)因为某些原因当jar任务运行时我的build / classes / main中的类没有存档到jar中,我只需获取一个空白的清单文件 . 如何使用默认jar任务将使用ant任务生成的这些类放入Jar中?

1 回答

  • 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")
    

相关问题