Gradle 构建不包括源/源时髦



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

  • 我有一个基本的时髦项目,即 src/org...../*.groovy 在根目录中
  • 我有以下构建.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/** 中的类不包括在内!(所有的依赖都是完美的)

这里有什么问题?

更新

当我添加: from files(fileTree(dir: 'src'))对于任务,它包括 .groovy 文件:(

当我添加

from sourceSets.main.output.classesDir

到任务并:

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

它们不包括在:(找不到任何其他方法...

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

Final work 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'
        }
    }

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知道它必须首先生成输出(例如运行编译任务)。

希望对您有所帮助!

你必须原谅我,但我最近从漫长的Microsoft生活中穿越过来,仍在学习。我对缺乏博客和基本内容的示例代码感到惊讶,我正在做的事情是如此标准......(我会发布一次/如果我弄清楚了)

注意: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/**' ]它构建但再次遗漏了我的所有来源。

相关内容

  • 没有找到相关文章

最新更新