我多项目在构建buildSrc目录.
buildSrc
---build
--- subProject1
----build (2)
--- subProject2
----build (3)
--- subProject3
----build (4)
--- subProject4
----build (5)
config
gradle
src
build (1)
Run Code Online (Sandbox Code Playgroud)
当我在项目的根目录中时,我写道:
gradle clean
Run Code Online (Sandbox Code Playgroud)
但只删除了根项目的构建目录(标记为1).如何触发Gradle删除所有构建目录prom buildSrc而不必手动到buildSrc并写入gradle clean.(标记为2,3,4,5)
在我的多项目中,我在根项目上运行测试任务,并期望它将在子项目上运行测试任务并生成单个测试报告。我观察到它从来没有在子项目上运行测试任务。我的期望是否不正确”我需要在我的 gradle 脚本中做任何特殊的配置吗?
请注意,我的根项目中没有测试。
我有一个带有两个文件夹的项目,它们是独立的,需要在Jenkins中单独构建(运行v2.74)
我的结构是
folder
??? project1
? ??? Jenkinsfile
??? project2
??? Jenkinsfile
Run Code Online (Sandbox Code Playgroud)
当我点击Jenkins中的"扫描组织"时,它不会发现子目录中的Jenkins文件.
以下是"扫描组织日志"中的示例:
Proposing kg-pipeline
Examining my-test-project
Checking branches...
Getting remote branches...
Checking branch jenkins
‘Jenkinsfile’ not found
Does not meet criteria
Checking branch master
‘Jenkinsfile’ not found
Does not meet criteria
2 branches were processed
Finished examining my-test-project
Run Code Online (Sandbox Code Playgroud)
我没有触及扫描组织的工作配置,并找到了Jenkinsfiles的分支.这是该项目的当前设置
我的问题是:如何配置Jenkins以单独查看每个文件夹?我也对以这种方式设置的示例项目的链接感兴趣.
我最近在我们现有的 Web 项目中添加了 Gradle 性质。该项目本身是一个分层的java项目
Common - DataAccess - Business - Web
\- Batch
Run Code Online (Sandbox Code Playgroud)
在我们使用之前,我们手动管理了项目的依赖关系,只将必要的库添加到每个项目中。
为了支持我们的项目结构,我创建了一个 gradle 多项目:
root
+-- build.gradle
+-- settings.gradle
+-- Common
+-- build.gradle
+-- DataAccess
+-- build.gradle
+-- Business
+-- build.gradle
+-- Web
+-- build.gradle
+-- Batch
+-- build.gradle
Run Code Online (Sandbox Code Playgroud)
这些文件基本上看起来像这样(当然是缩短的)
通用 -> build.gradle
[...]
implementation 'javax.money:money-api:1.0.3'
implementation 'org.slf4j:slf4j-log4j12:1.7.5'
testImplementation 'org.springframework:spring-test:4.3.13.RELEASE'
[...]
Run Code Online (Sandbox Code Playgroud)
数据访问 -> build.gradle
dependencies {
[...]
api project(':Common')
implementation 'javax.money:money-api:1.0.3'
implementation 'org.slf4j:slf4j-log4j12:1.7.5'
implementation 'org.hibernate:hibernate-core:5.2.14.Final'
implementation 'org.hibernate:hibernate-jcache:5.2.14.Final'
implementation 'org.springframework.data:spring-data-jpa:1.11.9.RELEASE'
testImplementation 'org.springframework:spring-test:4.3.13.RELEASE'
[...]
}
Run Code Online (Sandbox Code Playgroud)
业务 -> build.gradle …
我想将一个大型开发项目分成较小的项目,以便我可以单独管理和构建。这样我的团队就可以通过处理不同的项目来处理 Web 应用程序的不同部分。我想让多个 Visual Studio Blazor 项目参与同一个 Web 应用程序,以便多个 Visual Studio 项目共享同一个 IIS 应用程序根目录。我需要这个,因为管理大型 Web 应用程序的较小单元、将每个项目与其他项目分开构建(这缩短了开发过程中的构建时间)以及将大型 Web 应用程序划分为逻辑单元并拥有这些单元更容易共享公共资源,例如控件。我想要一个根 Blazor 项目http://localhost/MainWeb,它可以使用子(子网)项目http://localhost/MainWeb/subweb
我想为我的JavaScript项目创建一个干净的结构.该项目由一个Node.js服务器和两个单独的Angular.js前端组成,具有不同的用途.为了构建前端,我使用每个自定义的grunt构建.构建产生每个项目一个HTML文件和两个缩小/丑化的CSS和JavaScript文件.然后,每个前端在节点服务器的单独最小版本上运行(仅提供静态文件).
到目前为止,这么清楚.现在的目标是使插件模块能够添加到三个核心项目中的每一个.模块应该扩展其中一个项目的JavaScript.这意味着例如在一个前端的情况下将额外的角度模块添加到角度配置.我已经知道在哪里以及如何将角度模块代码添加到核心应用程序中.
现在的问题是:如何在多个项目上创建合理的构建过程,这也依赖于插件模块?我想出了两个解决方案.
你会如何解决这个问题?
我有一个使用 gradle 管理的多项目结构。所有java子项目都有这个jar块:
def main_class = "foo.Main"
jar {
manifest {
attributes 'Main-Class': main_class
}
}
Run Code Online (Sandbox Code Playgroud)
所以我决定将 jar 块移动到根项目,并且只def main_class在子项目中使用,但无论我如何定义变量main_class,它都不起作用。我也尝试project.ext过。properties {}
我有一个任务,称为dist它与project.ext:
根项目:
subprojects {
task dist(dependsOn: jar) << {
copy {
from('build/libs') {
include (build_jar)
}
into('.')
rename(build_jar, app_jar)
}
}
}
Run Code Online (Sandbox Code Playgroud)
一个子项目:
project.ext {
build_jar = "..."
app_jar = "..."
}
Run Code Online (Sandbox Code Playgroud)
如何定义与任务一起使用的jar变量dist?
我有一堆子项目,我定义如下(实际上由 a 生成project/meta.sbt):
lazy val Top = (project in file("."))
.aggregate(common, p1, p2, tests, scripts)
.dependsOn(common, p1, p2, tests, scripts)
lazy val common = project
lazy val p1 = project.dependsOn(common % "compile->compile;test->test")
lazy val p2 = project.dependsOn(common % "compile->compile;test->test")
lazy val tests = project.dependsOn(common % "compile->compile;test->test")
lazy val scripts = project
Run Code Online (Sandbox Code Playgroud)
AFAICT(所以也许这是错误的),顶部的aggregate和dependsOn都有意义:第一个在所有子项目中运行任务,第二个方便调试东西。
现在,问题是它只tests包含一堆测试,并且scripts是一个用作发布步骤的脚本——所以我需要以某种方式使其避免仅为它们创建 jar 文件。我仍然希望compile/ test/etc 被聚合,包括它们。
我对文档的理解是,这应该通过aggregate在 中设置密钥来完成Top,并且实际上添加类似的内容
.settings(aggregate in …Run Code Online (Sandbox Code Playgroud) 我最近一直在考虑这个问题,并希望得到一些关于我几天前的想法的反馈.
问题:
在典型的代码库中,每个模块都有一个main和一个test源集.这可以在一段时间内很好地工作但是迟早我总是偶然发现我希望将一组类组合在一起的情况,这些类允许更容易地测试涉及特定模块的代码.一个很好的例子hamcrest是给定模块的一组匹配器类.
假设1:
作为hamcrest测试代码的库,这些匹配器不应该进入main源集.
假设2:这些类也不应该进入test源集,因为对test源的依赖只是这些类可用的解决方法.人们通常不希望依赖于实际测试.它也建议不要(通过Netflix公司)来定义的依赖test项目的源集.
解决方案1:
创建一个包含main源集中这些类的专用模块,只需在需要它们的地方定义对该模块的测试依赖性.
这是我用了很长一段时间的方法,但我真的不喜欢它.
首先,我没有提出一个好名字,除了附加testSupport原始模块的名称,导致名称,如core-testSupport,persistence-testSupport等等.
其次,它创建了许多模块,项目树受到这些模块的污染.
解决方案2 :(我会很感激反馈)
configurations {
testSupportCompile.extendsFrom compile
testSupportRuntime.extendsFrom runtime
}
sourceSets {
testSupport {
compileClasspath += sourceSets.main.output + configurations.testSupportCompile
runtimeClasspath += compileClasspath + configurations.testSupportRuntime
}
}
task testSupportJar(type: Jar) {
from sourceSets.testSupport.output
classifier 'testSupport'
}
artifacts {
testSupportCompile testSupportJar
}
Run Code Online (Sandbox Code Playgroud)
上面的gradle配置可以在命名文件中,testSupport.gradle并应用于需要此专用源集的任何模块,以提供可在测试中重用的类. …
我在 IntelliJ IDEA 中有一个多项目 Kotlin 项目。无论是从 IDE 还是从控制台,它都可以正常编译和运行。但是,我的 gradle 文件存在问题:IDEA 抱怨“无法识别的依赖符号”以及其他类型的错误。
这是子项目 build.gradle 文件之一:
apply plugin: 'org.jetbrains.kotlin.jvm'
apply plugin: 'application'
sourceSets {
main {
java.srcDirs "src/java"
}
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
test {
useJUnitPlatform()
}
jar.dependsOn test
dependencies {
implementation platform('org.jetbrains.kotlin:kotlin-bom')
// All of the following lines show errors:
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4"
testImplementation "org.jetbrains.kotlin:kotlin-test"
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
}
Run Code Online (Sandbox Code Playgroud)
这很烦人,因为这样我就看不到我使用的库是否已过时。
此外,一些 gradle 任务即使运行良好也无法正确识别:
我不知道为什么outputs,outputDir并且doFirst在上面的屏幕截图中显示为灰色。
我尝试了gradle同步、“使缓存无效并重新启动”、“修复IDE”,甚至重新导入项目,但无济于事。你知道这里发生了什么吗?
multi-project ×10
gradle ×6
build ×3
java ×2
architecture ×1
blazor ×1
dependencies ×1
eclipse ×1
gruntjs ×1
javascript ×1
kotlin ×1
sbt ×1
scala ×1
subproject ×1
testing ×1
unit-testing ×1