当前位置: 首页 > 知识库问答 >
问题:

格拉德尔:FatJar不包括一些罐子

贺运良
2023-03-14

我们有一个这样的项目

公共-模块src-Spring引导工作者-模块

在工作模块中,我们build.gradle这样配置

plugins {
id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'


repositories {
  mavenCentral()
}



task fatJar(type: Jar) {
  manifest {
    attributes 'Implementation-Title': 'Gradle Jar File Example',
            'Implementation-Version': version,
            'Main-Class': 'com.worker.worker.EntryPoint'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
destinationDir(new File(projectDir.parent,"\\libs\\worker\\"))
with jar
}

dependencies {
  compile project(':jTransfer')
  compile project(':datamasking')
  compile project(':common')
  implementation 'com.google.code.gson:gson:2.8.6'
  implementation 'mysql:mysql-connector-java:8.0.19'
  implementation 'com.microsoft.sqlserver:mssql-jdbc'
  implementation 'com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8'
  testCompile group: 'junit', name: 'junit', version: '4.12'
}

当我运行任务法特加尔sqlserver: mssql-jdbc丢失时。我试图在{configurations.compile.collect{it.is目录()的这部分代码中打印?it: zipTree(it)}}和“它”从未引用到sqlserver jdbc jar。

由于worker模块包含公共模块“compile project(':common')”,所以我尝试将依赖项放在公共模块中。当我这样做时,在控制台中打印出sqlserver:mssql,当我转到jar存档时,包括sqlserver:mssql jar,但问题是当我运行java-jar worker时,输出是无法加载主类:。。。

同样的事情也发生在Tika库中。所以我不确定它是否与那些罐子有关,或者我正在做一些关键的事情来使用这个模块,也许会有一些冲突

我试着用这个

 from {
    configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
with jar

发生的是我的jar找不到主类,但是当我进入jar存档时。我去我的com.worker....我看到有两个EntryPoint.class文件。

总之,当我不使用这两行代码时,我的jar可以启动,它有一个EntryPoint.class文件,但是缺少jdbc jar库

共有1个答案

狄新立
2023-03-14

尝试包含所有compileClasspath和runtimeClasspath。

这样的任务:

task fatJar(type: Jar) {
    zip64 = true
    manifest {
        attributes 'Main-Class': 'your.main.class'
    }
    archiveBaseName.set("Name")
    archiveVersion.set(versionInt)
    from {
        configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    with jar

}
 类似资料:
  • 我试图用我的gradle项目运行junit测试,但不管是什么测试,它们都会抛出以下堆栈跟踪 我已经看到了一些建议的解决方案,但似乎没有一个奏效。当我在ant中运行它们时,我的测试运行良好。我已经确保xerces使用的是最新版本,我还添加了建议的版本 对于JVM,但似乎什么都不起作用。 任何建议都将不胜感激。我可以根据要求提供更多信息。 **更新** 做了以下更改- 但现在的结果如图所示 **更新2

  • 我通过VS Code创建了一个新的flutter项目。但是我不知道为什么我在运行时会有这个错误 失败:构建失败,有一个异常。 > 错误:配置根项目“android”时出现问题。 无法解析配置“:classpath”的所有项目。找不到com。Android工具。建造:梯度:3.6。2.在以下位置搜索: https://dl.google.com/dl/android/maven2/com/andro

  • 谷歌刚刚开源了它的构建工具Bazel。这个工具和Gradle有什么不同?它能做什么是Gradle做不到的,它做什么更好,Gradle做什么更好?

  • 我正在尝试让我现有的Android项目与渐变和智能J 12一起工作。以前,我曾让它与maven一起工作,但这似乎不像gradle那样灵活,而且据我所知,我需要的子文件夹更少。 我的Android项目分为干净的java库(:core)和实际的应用程序(:Android)。这两个项目都在我的主项目文件夹中。 我认为,用这个实现gradle工作的理想解决方案是将(:core)和(:android)项目视

  • 我正试图用quarkus运行简单的“入门”型gradle项目,每次我的单元测试都会因为这个错误而失败 按照这里的指示https://quarkus.io/guides/gradle-tooling对正在发生的事情有什么建议或想法吗?

  • 当我试图建立Android应用程序我得到这个错误: 当前版本的Android Gradle插件不支持按需配置,因为您使用的是Gradle 4.6或更高版本。建议:通过设置组织禁用按需配置。格拉德尔。configureondemand=在渐变中为false。属性文件或使用低于4.6的渐变版本。 在将此行添加到此文件中后,作为并尝试再次构建,我也会出错