gpt4 book ai didi

gradle - gradle 构建脚本应该如何模块化此应用程序?

转载 作者:行者123 更新时间:2023-12-02 01:22:43 24 4
gpt4 key购买 nike

我正在尝试应用 Gradle in Action 一书中的示例来学习如何将 gradle 应用程序分成子项目。我做了书中的示例,一切正常。

我决定将相同的概念应用于 Griffon 框架中名为 minimalistic build 的示例应用程序,源代码:sources .我选择这个应用程序是因为它遵循正常的应用程序结构而不是 Griffon 的,我试图填补 Griffon 多项目构建文档中的空白(恕我直言):它有一个使用 Open-Dolphin、Swing、JavaFX、Servlet 的示例我觉得学习基础知识太复杂了。

当然,我多次撞墙......

Griffon 的 JavaFX 应用程序具有以下结构:

├── build.gradle
├── config
│   └── HEADER
├── gradle
│   ├── functional-test.gradle
│   ├── integration-test.gradle
│   ├── javafx-plugin.gradle
│   └── wrapper
│   ├── gradle-wrapper.jar
│   └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── src
├── functional-test
│   └── java
│   └── org
│   └── example
│   └── SampleFunctionalTest.java
├── integration-test
│   └── java
│   └── org
│   └── example
│   └── SampleIntegrationTest.java
├── main
│   ├── java
│   │   ├── Config.java
│   │   └── org
│   │   └── example
│   │   ├── Launcher.java
│   │   ├── SampleController.java
│   │   ├── SampleModel.java
│   │   ├── SampleService.java
│   │   └── SampleView.java
│   └── resources
│   ├── application.properties
│   ├── griffon-icon-128x128.png
│   ├── griffon-icon-16x16.png
│   ├── griffon-icon-24x24.png
│   ├── griffon-icon-256x256.png
│   ├── griffon-icon-32x32.png
│   ├── griffon-icon-48x48.png
│   ├── griffon-icon-64x64.png
│   ├── griffon.png
│   ├── log4j.properties
│   ├── messages.properties
│   ├── META-INF
│   │   └── griffon
│   │   ├── griffon.core.artifact.GriffonController
│   │   ├── griffon.core.artifact.GriffonModel
│   │   ├── griffon.core.artifact.GriffonService
│   │   └── griffon.core.artifact.GriffonView
│   ├── org
│   │   └── example
│   │   └── sample.fxml
│   └── resources.properties
└── test
└── java
└── org
└── example
├── SampleControllerTest.java
└── SampleServiceTest.java

build.gradle 文件内容为:

// tag::plugins[]
plugins {
id 'java'
id 'idea'
id 'com.github.ben-manes.versions' version '0.12.0'
id 'com.github.hierynomus.license' version '0.11.0'
}

apply from: 'gradle/javafx-plugin.gradle'
apply from: 'gradle/integration-test.gradle'
apply from: 'gradle/functional-test.gradle'
// end::plugins[]

// tag::javafx[]
javafx {
mainClass = 'org.example.Launcher'
}
// end::javafx[]

// tag::dependencies[]

repositories {
jcenter()
mavenLocal()
}

dependencies {
compile "org.codehaus.griffon:griffon-javafx:${griffonVersion}"
compile "org.codehaus.griffon:griffon-guice:${griffonVersion}"

runtime('log4j:log4j:1.2.17') {
exclude group: 'ant', module: 'ant-nodeps'
exclude group: 'ant', module: 'ant-junit'
exclude group: 'ant-contrib', module: 'ant-contrib'
}
runtime 'org.slf4j:slf4j-log4j12:1.7.21'

testCompile "org.codehaus.griffon:griffon-javafx-test:${griffonVersion}"
testCompile 'pl.pragmatists:JUnitParams:1.0.5'
testCompile 'org.mockito:mockito-core:2.0.59-beta'
}
// end::dependencies[]

// tag::resources[]
processResources {
from(sourceSets.main.resources.srcDirs) {
exclude '**/*.properties'
exclude '**/*.xml'
}
from(sourceSets.main.resources.srcDirs) {
include '**/*.properties'
include '**/*.xml'
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [
'application.name' : project.name,
'application.version': project.version,
'griffon.version' : griffonVersion
])
}
}
// end::resources[]

license {
header = rootProject.file('config/HEADER')
strictCheck = true
ignoreFailures = true
mapping {
java = 'SLASHSTAR_STYLE'
fxml = 'XML_STYLE'
}
ext.year = '2016'
exclude '**/*.png'
}

我试图实现的结构是:

├── build.gradle
├── config
│   └── HEADER
├── gradle
│   ├── functional-test.gradle
│   ├── integration-test.gradle
│   ├── javafx-plugin.gradle
│   └── wrapper
│   ├── gradle-wrapper.jar
│   └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── launcher
│   ├── launcher-build.gradle
│   └── src
│   └── main
│   └── java
│   ├── Config.java
│   └── org
│   └── example
│   └── Launcher.java
├── resources
│   ├── resources-build.gradle
│   └── src
│   └── main
│   └── resources
│   ├── application.properties
│   ├── griffon-icon-128x128.png
│   ├── griffon-icon-16x16.png
│   ├── griffon-icon-24x24.png
│   ├── griffon-icon-256x256.png
│   ├── griffon-icon-32x32.png
│   ├── griffon-icon-48x48.png
│   ├── griffon-icon-64x64.png
│   ├── griffon.png
│   ├── log4j.properties
│   ├── messages.properties
│   └── resources.properties
├── service
│   ├── resources
│   │   └── META-INF
│   │   └── griffon
│   │   └── griffon.core.artifact.GriffonController
│   ├── service-build.gradle
│   └── src
│   ├── main
│   │   └── java
│   │   └── org
│   │   └── example
│   │   └── SampleService.java
│   └── test
│   └── java
│   └── org
│   └── example
│   └── SampleServiceTest.java
├── settings.gradle
└── view
├── src
│   ├── functional-test
│   │   └── java
│   │   └── org
│   │   └── example
│   │   └── SampleFunctionalTest.java
│   ├── integration-test
│   │   └── java
│   │   └── org
│   │   └── example
│   │   └── SampleIntegrationTest.java
│   ├── main
│   │   ├── java
│   │   │   └── org
│   │   │   └── example
│   │   │   ├── SampleController.java
│   │   │   ├── SampleModel.java
│   │   │   └── SampleView.java
│   │   └── resources
│   │   ├── META-INF
│   │   │   └── griffon
│   │   │   ├── griffon.core.artifact.GriffonModel
│   │   │   ├── griffon.core.artifact.GriffonService
│   │   │   └── griffon.core.artifact.GriffonView
│   │   └── org
│   │   └── example
│   │   └── sample.fxml
│   └── test
│   └── java
│   └── org
│   └── example
│   └── SampleControllerTest.java
└── view-build.gradle

我不知道那个结构是否更有意义,但这是我第一个想到的。

无论我尝试了多少,我都无法构建这个项目,我想知道是否有人可以告诉我我是否在选择子项目时犯了错误,以及构建文件的内容应该是什么.

我用重新排列的源创建了一个 zip 文件 here保持原始 build.gradle 文件不变,使用 settings.gradle 文件让 Gradle 正确识别新结构。

谢谢!

最佳答案

问题是由于服务项目中缺少资源文件引起的。您会在 view 项目中发现类似的问题。这是因为所有资源文件都已移动到另一个位置(resources 项目)。在将应用程序拆分为子项目之前没有问题,因为所有资源都在正确的位置。

您可以按照以下步骤修复构建:

$ cd service
$ mkdir -p src/test/resources
$ touch src/test/resources/Config.properties
$ mkdir -p src/main/resources
$ mv ../resources/src/main/resources/messages.properties src/main/resources/

$ cd ../view
$ mkdir -p src/test/resources
$ touch src/test/resources/Config.properties

这应该足以使测试再次通过。

关于gradle - gradle 构建脚本应该如何模块化此应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38978436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com