- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的构建使用来自两个项目的源代码:ProjectA 和 ProjectB,并使用 ProjectB 中的类和资源生成 JAR。我定义了自定义 sourceSet mainProjectB ,它应该在单独的目录中具有输出:
sourceSets {
mainProjectB {
output.classesDir = "$buildDir/build/classes/projectB"
output.resourcesDir = "$buildDir/build/resources/projectB"
java { srcDirs = ['src/main/java']}
resources { srcDirs = ['src/main/resources']}
}
mainProjectA {
java { srcDirs = [
'../projectA/src/main/java'
]}
resources { srcDirs = [
'../projectA/src/main/resources'
]}
}
test {
java {
srcDirs = [
'../projectA/src/test/java',
'src/test/java'
]}
resources {
srcDirs = [
'../projectA/src/test/resources',
'src/test/resources'
]}
}
}
compileJava {
source sourceSets.mainProjectB.allJava
source sourceSets.mainProjectA.allJava
}
processResources {
from sourceSets.mainProjectB.resources
from sourceSets.mainProjectA.resources
}
jar {
from sourceSets.mainProjectB.output.classesDir
from sourceSets.mainProjectB.output.resourcesDir
}
问题:自定义 sourceSet mainProjectB 忽略指定的输出目录。不会创建目录“$buildDir/build/classes/projectB”和“$buildDir/build/resources/projectB”,因此,JAR 包含来自两个项目(而不是 ProjectB)的文件。
更新:
项目 A 和 B 具有循环依赖关系。这就是为什么他们必须共享源代码。
最佳答案
我会考虑使用子项目和项目来实现您的目标 - gradel docs 。通过以下方法,您可以根据您的构建获取任何类型的 jar 文件:
group 'CoreProject'
version '1.0-SNAPSHOT'
subprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
}
project (':projectA') {
}
project (':projectB') {
def generatedResources = "$buildDir"
//in case you want resources and classes to be written to custom location where
//redefined paths are relative to projectB root folder
sourceSets {
main {
output.classesDir = 'build/classes/projectB'
output.resourcesDir = 'build/resources/projectB'
}
}
dependencies {
compile project(':projectA')
}
jar {
manifest.mainAttributes(
'Main-Class': "ProjectBClass"
)
}
//To create fat Jar that will contain classes and resources from all dependencies
task fatJar(type: Jar) {
manifest.from jar.manifest
classifier = 'all'
from {
configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) }
} {
exclude "ProjectAResource" //if want to exclude resources from projectA
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
with jar
}
}
如果您运行projectB的jar任务,将创建以下jar,每个jar仅包含自己的类和资源:projectA/build/libs/projectA.jar,< strong>projectB/build/libs/projectB.jar(“包含来自 ProjectB 的类和资源的 JAR”,正如您在评论中所询问的那样)
如果您运行projectB的farJar任务,将创建以下jar文件,其中包含两个项目中的类和资源,并且您可以从projectA和projectB项目中排除任何文件模式以创建您想要的任何最终jar例如:projectB/build/libs/projectB-all.jar
这是我为模仿您的场景而创建的项目文件夹结构的屏幕截图(据我所知):
附注还要确保文件夹projectB/build和projectA/build没有被任何进程锁定,并删除这些句柄(如果有),否则Gradle将无法运行。
关于gradle - 如何在Gradle中为自定义sourceSet指定output.classesDir?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333093/
根据documentation ,我试过使用aspectj插件。 这是我在构建项目时收到的消息。 FAILURE: Build failed with an exception. * Where: B
我的构建使用来自两个项目的源代码:ProjectA 和 ProjectB,并使用 ProjectB 中的类和资源生成 JAR。我定义了自定义 sourceSet mainProjectB ,它应该在单
我看过类似的帖子,但我不太确定应该对我的配置进行哪些更改。我最近升级到 gradle 4.10 并开始出现一堆错误。我对 groovy 很陌生。 说明 我有一个 gradle 文件 uiTest.gr
请帮我解决错误? Could not get unknown property 'classesDir' for main classes of type org.gradle.api.inter
我正在尝试使用 gradle gretty 插件(gradle 版本 3.4)构建 Java Servlet。我依赖于另一个项目 databaseprovider:1.0-SNAPSHOT(包括与数据
我是一名优秀的程序员,十分优秀!