【问题标题】:Gradle does not include resource folder to jar [duplicate]Gradle不包含jar的资源文件夹[重复]
【发布时间】:2022-01-24 16:43:19
【问题描述】:

我在从 gradle 项目构建 jar 时遇到了一些麻烦。即 gradle 不包括我的资源文件夹,即使我在 build.gradle 中指定了它,如下所示:

plugins {
    id 'application'
}

repositories {
    mavenCentral()
}

application {
    mainClass = 'skorupinski.xmass.Main'
}

sourceSets {
    main {
        java {
            srcDirs = ['./src/main/java']
        }
        resources {
            srcDirs = ['./src/main/resources']
        }
    }
}

jar {  
    manifest {  
        attributes(  
                'Main-Class': 'skorupinski.xmass.Main'  
        )  
    }  

    baseName = 'hi'
}

我加载到我的 java 程序中的资源文件夹中有图像。当我运行 jar 文件时,它返回一个错误,除非我将 jar 放在与 src 文件夹相同的目录中,否则它无法归档图像文件。

My file tree

【问题讨论】:

  • 如何加载图像文件?我很确定 Gradle 会做它一直做的事情并包含资源文件夹。也许您尝试加载图像的方式是真正的问题。
  • @ThomasKläger 我通过路径“src/main/resources/image.png”加载它,当我在没有构建到 jar 的情况下运行它时,它可以完美运行。
  • 要获取放置在我的 jar 文件中的资源,我在我的 jar 任务中指定:from (buildDir) { include 'pattern' }
  • @JeffHolt 我试过这样:from('src/main') { include 'resources/*.png' } 没有效果
  • 您是真的加载资源(如stackoverflow.com/a/15749260:InputStream is = MyTest.class.getResourceAsStream("/image.png"); 中所述)还是尝试从文件系统加载它(InputStream is = new FileInputStream("./image.png");)?由于文件系统中不存在打包的资源,因此您无法使用java.io.File / java.io.FileInputStream 等访问它们

标签: java gradle


【解决方案1】:

也许你应该尝试在 build.gradle 的 jar 部分中专门指定 include

jar { 

// try adding this
    from('src/main/resources') {
       include '**/*.*'
    }

 
    manifest {  
        attributes(  
                'Main-Class': 'skorupinski.xmass.Main'  
        )  
    }  

    baseName = 'hi'
}

【讨论】:

  • 它现在包含目录,但返回一个错误,即其中的每个 png 都是重复的,并且没有重复策略集。
  • 所以文件已经在 jar 中了。那么问题可能出在您的代码上,即您如何通过代码访问它,或者清单文件可能有问题。你能解压你的jar并检查它的清单文件吗?我对Class-Path 定义特别感兴趣
猜你喜欢
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2018-08-28
  • 2016-01-29
  • 1970-01-01
  • 2014-08-26
相关资源
最近更新 更多