我正在尝试从基本程序创建一个jar。
我有以下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 / **中的sclasses不包括在内! (所有的依赖都很完美)
这里有什么问题?
更新
当我添加: 来自文件(fileTree(dir:'src')) 它包括.groovy文件的任务:(
当我添加
from sourceSets.main.output.classesDir
完成任务并:
sourceSets {
main {
groovy {
srcDir 'src'
}
}
}
他们没有被包括在内:(找不到任何其他方式......
答案 0 :(得分:4)
默认情况下,当应用'groovy'插件时,Gradle会在src/main/groovy
中查找源代码。您需要重新构建项目或配置source sets以正确反映项目结构。
答案 1 :(得分:4)
最终工作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'
}
}
答案 2 :(得分:1)
在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知道它必须首先生成输出(例如,运行编译任务)。
希望有所帮助!答案 3 :(得分:-1)
你必须原谅我,但我最近已经从微软的长寿中走过来,我还在学习。我很惊讶缺乏博客和基本内容的示例代码,我正在做的事情是如此标准....(我会发布一次/如果我想出来的话)
注意:Intellij - >构建 - > 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:配置':编译'
如果我将src行更改为: srcDirs = [' src / **' ] 它会构建,但会再次遗漏我的所有资源。