我有一个Gradle项目,作为一个简单的示例,它看起来类似于以下内容:
root
|
|build.gradle.kts
|settings.gradle.kts
|config.yaml
|web/
|build.gradle.kts
|src/
|main/
|java....(etc)
web项目是一个纯粹的Dropwizard应用程序,它只做声明一个配置和一个使用它的应用程序,以便服务器能够启动。
在我的root
路径中,我已经在settings.gradle.kts
文件中定义了我的子项目(在本例中为:web
)。在我的root
build.gradle.kts
中,我声明了一个实现(project(“:web”))
依赖项。
我有一个run
任务和一个fatjar
任务来运行/构建这个应用程序。
val run by tasks.getting(JavaExec::class) {
args("server", "config.yaml")
}
val fatJar = task("fatJar", type = Jar::class) {
manifest {
attributes["Implementation-Title"] = "Some API"
attributes["Main-Class"] = "my.package.web.HelloWorldApplication"
}
from(configurations.runtimeClasspath.get().map({ if (it.isDirectory) it else zipTree(it) }))
with(tasks.jar.get() as CopySpec)
}
tasks {
"build" {
dependsOn(fatJar)
}
}
我可以构建fatJar,它包含了我所期望的所有类(根的依赖项、web的依赖项、它们的传递依赖项,等等)。
但是,当我运行./gradlew run
时,由于在类路径上发现多个日志绑定,启动Dropwizard应用程序时出错。下面是错误:
./gradlew run
Starting a Gradle Daemon, 1 busy and 1 incompatible and 3 stopped Daemons could not be reused, use --status for details
> Task :run
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/me/.gradle/caches/5.4.1/generated-gradle-jars/gradle-api-5.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/me/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.3/7c4f3c474fb2c041d8028740440937705ebb473a/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.gradle.internal.logging.slf4j.OutputEventListenerBackedLoggerContext]
Exception in thread "main" java.lang.IllegalStateException: Unable to acquire the logger context
at io.dropwizard.logging.LoggingUtil.getLoggerContext(LoggingUtil.java:46)
at io.dropwizard.logging.BootstrapLogging.bootstrap(BootstrapLogging.java:52)
at io.dropwizard.logging.BootstrapLogging.bootstrap(BootstrapLogging.java:41)
at io.dropwizard.Application.bootstrapLogging(Application.java:38)
at io.dropwizard.Application.<init>(Application.java:26)
at my.package.web.HelloWorldApplication.<init>(HelloWorldApplication.java:15)
at my.package.web.HelloWorldApplication.main(HelloWorldApplication.java:17)
> Task :run FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':run'.
> Process 'command '/Library/Java/JavaVirtualMachines/jdk-12.0.1.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 25s
13 actionable tasks: 1 executed, 12 up-to-date
我知道我可以从Dropwizard中删除logback,但我更想弄清楚为什么gradle-api-5.4.1.jar
被绑定到我的应用程序中。我一辈子都弄不明白,也不明白为什么它会被拉进来。
任何指示都将不胜感激。
谢谢
因此,我在问这个问题和我正在做的事情时犯的错误是,我没有提到或意识到我在意外事件的根脚本中应用了kotlin-dsl
插件。一旦我移除这个,一切都如我所愿。
我无法构建gradle项目,即使我编辑gradle属性,我也会得到以下错误: 我该如何解决这个问题?
是否可以设置子gradle项目的父项目。 在我的例子中,所有父子项目都位于文件层次结构中的同一级别。例如 > 代码 > /父项目 构建。格拉德尔 /child项目1 构建。格拉德尔 /子项目2 构建。格拉德尔 这里,项目1依赖于项目2,所以我将它们称为 也在我的设置中。gradle文件,我有 有了它,我可以从父项目文件夹运行任务,但单个任务不会从子项目运行。
我有一个多项目gradle构建,当我运行“gradle war”时,它在每个子项目中构建一个war文件。 我现在希望在根项目中创建一个dist或tar任务,将所有war文件添加到tar中。 如何运行依赖于子项目的特定任务的任务?
我查看了文档,没有找到这样做的方法。有没有办法告诉gradle idea任务创建目录项目结构()而不是项目/模块文件()?
我面临以下问题。我有一个多模块的Gradle项目。一个模块是我的根项目,第二个模块是集成测试。 为了让我的集成测试运行,复制任务需要首先运行,以便将一些资产移动到项目根目录上的文件夹中。 我已经在我的根项目上定义了这样一个任务,当我试图调用它时,它什么也不做(我尝试了几种不同的调用方式)。 由于失败,我继续在子项目本身上创建了以下任务: 这是我的另一个任务。我的目标是让它将根项目类以及在下生成的j
我想在我的Android/Eclipse项目中使用gradle,因为我希望能够在正式版本旁边安装我的应用程序的开发版本(如下所示:同时安装稳定和开发应用程序版本的实用方法是什么?) 使用命令行这样做对我来说是可以的。 因此,我将项目的src文件夹移动到src/main/java并创建了一个文件(如下所述:http://www.nodeclipse.org/projects/gradle/andro