【问题标题】:Gradle build not including source/src groovyGradle 构建不包括 source/src groovy
【发布时间】:2015-01-15 01:44:21
【问题描述】:

我正在尝试从一个基本程序创建一个 jar。

  • 我有一个基本的 groovy 项目,即 src/org...../*.groovy 在根目录中
  • 我有以下 build.gradle

    apply plugin: 'groovy'
    version = '1.0'
    
    repositories {
        mavenCentral();
    }
    
    dependencies
    {
        compile files (fileTree(dir: 'lib', include: ['*.jar']),
            fileTree(dir: 'lib/DocxDep', include: ['*.jar']))
    }
    
    task buildLabServicesJar(type: Jar) {
    from files(sourceSets.main.output.classesDir)
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
        configurations.runtime.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    
    manifest {
        attributes 'Implementation-Title': 'Lab Services',
            'Implementation-Version': version,
            'Main-Class': 'org.xxx.clarity.ClarityServices'
        }
    }
    

问题是当我运行和/或检查 jar 文件时,我的 src/** 中的 sclass 不包括在内! (所有的依赖都是完美的)

这里有什么问题?

更新

当我添加: 从文件(文件树(目录:'src')) 它包含 .groovy 文件的任务:(

当我添加时

from sourceSets.main.output.classesDir

任务和:

sourceSets {
    main {
        groovy {
            srcDir 'src'
        }
    }
}

他们没有被包括在内:(找不到任何其他方式....

【问题讨论】:

  • 只是为了澄清我在世界各地的 gradle 文件中看到的一个小问题。 groovy.srcDir 'src' 是将'src' 目录添加 到源目录列表中(按照惯例,它包含 src/main/groovy,就像已经指出的标记一样)。 REPLACE 约定使用 groovy.srcDir = ['src']

标签: groovy jar gradle


【解决方案1】:

默认情况下,当应用 'groovy' 插件时,Gradle 会在 src/main/groovy 中查找源代码。您需要重组您的项目或配置您的 source sets 以适当地反映您的项目结构。

【讨论】:

  • 我什至尝试将测试 groovy 文件添加到包 main.groovy 中,但它仍然没有被包含在内。建造不应该这么难。
  • @garethreid:不是。不遵守约定会让你的生活变得艰难。
【解决方案2】:

最终工作的 build.gradle。 (谢谢大家)。

    apply plugin: 'application'
    apply plugin: 'groovy'

    version = '1.0'

    repositories {
        mavenCentral();
    }

    dependencies
        {
            compile files (fileTree(dir: 'lib', include: ['*.jar']),
                fileTree(dir: 'lib/DocxDep', include: ['*.jar']))
            compile 'org.codehaus.groovy:groovy-all:2.3.6'  //Was missing
        }

    task buildLabServicesJar(type: Jar) {
        from files(sourceSets.main.output)   //Was missing/wrong      
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
        configurations.runtime.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    with jar

    sourceSets.main.groovy {
        srcDirs = [ 'src' ] //Was missing/wrong
    } 

    manifest {
        attributes 'Implementation-Title': 'Lab Services',
            'Implementation-Version': version,
            'Main-Class': 'org.petermac.clarity.ClarityServices'
        }
    }

【讨论】:

    【解决方案3】:

    在您的 jar 任务中引用 sourceSets.main.output.classesDir 意味着它只会从您的 jar 中的该目录复制所有内容。问题是当你运行gradle buildLabServicesJar 时,没有任何东西告诉 gradle 应该首先编译这些类。这就是目录保持为空并且您的 jar 不包含已编译类的原因。如果您从

    修改您的任务声明
    task buildLabServicesJar(type: Jar) {
        from files(sourceSets.main.output.classesDir)
        ...
    }
    

    task buildLabServicesJar(type: Jar) {
        from files(sourceSets.main.output)
        ...
    }
    

    任务自动装配开始。任务自动装配意味着如果您将一个任务的输出声明为另一个任务(您的 buildLabServicesJar)的输入,gradle 知道它必须首先生成输出(例如运行编译任务)。

    希望有帮助!

    【讨论】:

    • 我进行了更改和更改 -> srcDirs = [ 'src/**' ] 现在我的 jar 中没有源代码(类或其他)。
    • 应该是 srcDirs = ['src']
    • 如果我这样做 (['src']) 我得到错误:无法推断 Groovy 类路径,因为在类路径上找不到 Groovy Jar:配置 ':compile'
    • 你必须在你的编译类路径中声明一个 groovy 库。例如 groovy-all
    【解决方案4】:

    您必须原谅我,但我最近刚从微软的漫长生涯中跨过,并且仍在学习。我对缺少基本内容的博客和示例代码感到惊讶,我所做的事情是如此标准......(我会发布一次/如果我弄清楚了)

    注意:Intellij -> Build -> Build Artifacts 运行良好,但我想将其移至 Bamboo。

    无论如何考虑到每个人的想法,这是我的文件(和错误)

         apply plugin: 'groovy'
        version = '1.0'
    
        repositories {
            mavenCentral();
        }
    
        dependencies
        {
            compile files (fileTree(dir: 'lib', include: ['*.jar']),
                    fileTree(dir: 'lib/DocxDep', include: ['*.jar']))
        }
        //println "Classes dir: " + sourceSets.main.groovy
    
    
        task buildLabServicesJar(type: Jar) {
            from files(sourceSets.main.output)
            //from sourceSets.main.groovy.output
            //from files(fileTree(dir: 'src'))        
            from {
                configurations.compile.collect {
                    it.isDirectory() ? it : zipTree(it)
                }
                configurations.runtime.collect {
                    it.isDirectory() ? it : zipTree(it)
                }
            }
    
            manifest {
                attributes 'Implementation-Title': 'Lab Services',
                        'Implementation-Version': version,
                'Main-Class': 'org.petermac.clarity.ClarityServices'
            }
        }
    
        sourceSets {
            main {
                groovy.srcDirs = [ 'src' ]
            }
        }
    

    错误:无法推断 Groovy 类路径,因为在类路径上找不到 Groovy Jar:配置 ':compile'

    如果我将 src 行更改为: srcDirs = ['src/**'] 它构建但又忽略了我所有的源代码。

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 1970-01-01
      • 2012-02-03
      • 2021-11-01
      • 2017-11-03
      • 1970-01-01
      • 2017-09-27
      • 2014-11-10
      • 2014-07-14
      相关资源
      最近更新 更多