2017-06-05 26 views
0

我有gradle的問題。 我需要res文件夾的位置與項目中的位置完全相同,以便以與「unbuild」項目中相同的方式將可執行文件發送到資源。 我的項目文件樹:如何將項目的res文件放入同一文件夾中的jar文件中?

Project 
+--src 
    +--main 
     |--kotlin 
     +--res 

在項目資源使用我通過以下方式解決:

var serviceAccount = FileInputStream("src/main/res/my_resource_file.json") 

我需要在組裝時保存在jar文件

資源文件的項目位置

我的build.gradle文件:

group 'Bot' 
version '1.0' 

buildscript { 
    ext.kotlin_version = '1.1.2' 

    repositories { 
     mavenCentral() 
     jcenter() 
    } 
    dependencies { 
     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 
    } 
} 

apply plugin: 'kotlin' 

repositories { 
    mavenCentral() 
} 

ext { 
    jsoup = "1.10.2" 
    //... 
    firebase_admin = "5.0.0" 
} 

dependencies { 
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" 
    //... 
    compile "com.google.firebase:firebase-admin:$firebase_admin" 
} 

sourceSets { 
    main.java.srcDirs += 'src/main/kotlin/' 
    test.java.srcDirs += 'src/test/kotlin/' 
    main { 
     resources { 
      srcDirs = ["src/main/res"] 
     } 
    } 
} 

jar { 
    manifest { 
     attributes 'Main-Class': 'com.my.bot.MainKt' 
    } 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
} 

我懷疑你需要配置本節jar{//...},但我不知道是什麼做是gradle這個

回答

0

通常你會參考如資源:src/main/resources作爲然後被複制自動複製到你的JAR的搖籃源文件夾。然後使用Classloader將資源作爲流讀取。

// relative to the current class package location 
val input = javaClass.getResourceAsStream("/my_resource_file.json") 

// or use system classloader 
val input = ClassLoader.getSystemClassLoader().getResourceAsStream("my_resource_file.json") 

你是不是做它在一個非標準的方式使用res作爲目錄名稱,而不是resources並試圖訪問它:

如果我把一個文件在src/main/resources/my_resource_file.json它會通過加載作爲文件而不是類路徑資源。在Gradle文檔中(類似於Maven)他們解釋文件格式:Gradle Java Project Layout

相關問題