我正在尝试从基本程序创建一个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/**' ]它构建但再次遗漏了我的所有来源。