Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Gradle将配置文件从jar中分离出来_Java_Gradle - Fatal编程技术网

Java 如何使用Gradle将配置文件从jar中分离出来

Java 如何使用Gradle将配置文件从jar中分离出来,java,gradle,Java,Gradle,我是Gradle的新手,在新项目中,我尝试使用Gradle4来管理和编译项目。任务installDist用于生成分发文件夹。Gradle将类和所有配置压缩到jar文件中,它工作得很好,但我希望jar只包含独立文件夹中的类和配置 以下是我的源文件夹结构: src --main --java --resources build --install --${project.name} --bin --lib 以下是当前的dist文件夹结构: src --main -

我是Gradle的新手,在新项目中,我尝试使用Gradle4来管理和编译项目。任务installDist用于生成分发文件夹。Gradle将类和所有配置压缩到jar文件中,它工作得很好,但我希望jar只包含独立文件夹中的类和配置

以下是我的源文件夹结构:

src
--main
  --java
  --resources
build
--install
  --${project.name}
    --bin
    --lib
以下是当前的dist文件夹结构:

src
--main
  --java
  --resources
build
--install
  --${project.name}
    --bin
    --lib
但是我想要下面的东西:

build
--install
  --${project.name}
    --bin
    --lib
    --resources
我想开始脚本也应该修改,现在我编写了一个CreateStartScripts任务,如下所示:

task testServer(type: CreateStartScripts) {
    mainClassName = 'com.xxx.test.Server'
    applicationName = 'test-server'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

有人能帮我写Gradle脚本吗?

3 build.Gradle中的修改:

  • 抑制要内置到jar中的配置文件:

    processResources {
        // if you have any other file suffix, append them below
        exclude '*.properties', '*.xml'
    }
    
  • 将配置文件复制到dist文件夹:

    apply plugin: 'distribution'
    
    installDist.doLast {
        copy {
            from 'src/main/resources/'
            // $rootProject.name defined in settings.gradle
            into "$buildDir/install/$rootProject.name/resources"
        }
    }
    
  • 将资源文件夹添加到类路径:

    task testServer(type: CreateStartScripts) {
        mainClassName = 'com.XXX.XXX.TestServer'
        applicationName = 'test-server'
        outputDir = new File(project.buildDir, 'tmp')
        classpath = jar.outputs.files + project.configurations.runtime
        classpath += files('src/main/resources')
        // gradle find all classpath files under install/${projectname}/lib defaultly
        // replace lib/resources with resources, thank [Fadeev's solution][1]
        doLast {
            def windowsScriptFile = file getWindowsScript()
            def unixScriptFile = file getUnixScript()
            windowsScriptFile.text = windowsScriptFile.text.replace('%APP_HOME%\\lib\\resources', '%APP_HOME%\\resources')
            unixScriptFile.text = unixScriptFile.text.replace('$APP_HOME/lib/resources', '$APP_HOME/resources')
        }
    }