Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
在Java8的gradle中的jar清单文件中添加类路径_Java_Gradle_Classpath - Fatal编程技术网

在Java8的gradle中的jar清单文件中添加类路径

在Java8的gradle中的jar清单文件中添加类路径,java,gradle,classpath,Java,Gradle,Classpath,我需要以下面的格式将数据添加到jar文件的MANIFEST.MF中。我尝试了下面的方法,但未能实现。我需要它在下面的方式。我正在使用Gradle2.3和java java version "1.8.0_66" Java(TM) SE Runtime Environment (build 1.8.0_66-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode) 我的身材,格雷德尔 `apply plugin: 'j

我需要以下面的格式将数据添加到jar文件的MANIFEST.MF中。我尝试了下面的方法,但未能实现。我需要它在下面的方式。我正在使用Gradle2.3和java

java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
我的身材,格雷德尔

`apply plugin: 'java'
repositories {
    mavenCentral()
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.12'
    compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.4'
    compile 'org.apache.logging.log4j:log4j-api:2.4'
    compile 'org.apache.logging.log4j:log4j-core:2.4'
    compile 'commons-cli:commons-cli:1.3.1'
    compile 'commons-io:commons-io:2.4'
    testCompile 'junit:junit:4.12' 
}

jar {
    sourceCompatibility = 1.7 //Java version compatibility to use when compiling Java source.
    targetCompatibility = 1.7 //Java version to generate classes for.
    compileJava.options.debugOptions.debugLevel = "source,lines,vars" // Include debug information

    manifest {
      attributes(
         "Manifest-Version": "1.0",
         "Class-Path": configurations.compile.collect { "libs/" + it.getName() }.join(' ')     
      )
   }
}`
我在MANIFEST.MF中找到了这个文本

Manifest-Version: 1.0
Class-Path: libs/slf4j-api-1.7.12.jar libs/log4j-slf4j-impl-2.4.jar li
 bs/log4j-api-2.4.jar libs/log4j-core-2.4.jar libs/commons-cli-1.3.1.j
 ar libs/commons-io-2.4.jar

有什么想法吗?如何在清单中正确地写下库列表?如果我用换行符删除额外的空格,jar文件就会运行。

这都是关于需求的。根据,在清单文件中:

在UTF8编码形式下,任何行的长度不得超过72字节(非字符)。如果某个值会使初始行长于此值,则应在额外的行上继续该值(每个行以单个空格开始)

Gradle在每72个字符后插入新行分隔符,因为您有一个字符串作为集合类路径元素。但由于:

类路径:

此属性的值指定此应用程序或扩展需要的扩展或库的相对URL。URL由一个或多个空格分隔

这可能是一个相当棘手的解决方案,您必须将所有类路径的条目收集到一个变量中,并对该变量进行格式化,这样每个元素都将位于一个单独的行中,长度为72,并且每行都有一个空格。举个例子:

int i = 0;
String classpathVar = configurations.compile.collect { " libs/" + (i++==0?String.format("%0\$-50s", it.getName()):String.format("%0\$-62s", it.getName()))   }.join(" ");
jar{
    manifest {
        attributes("Implementation-Title": "SIRIUS Workflow Executor",
                "Implementation-Version": version,
                "Class-Path": classpathVar )
    }
}
将为您提供这样一个清单文件内容,如:

Class-Path:  libs/snmp4j-2.3.4.jar                                    
 libs/jaxb                                                            
 libs/datamodel.jar                                                   
 libs/log4j-1.2.17.jar

根据文件,它必须是有效的。

你说的“以下格式”是什么意思?你想要什么格式?我想要去掉多余的空格和换行符。如果类路径字符串的格式为“some.jar some1.jar”(分隔符为“”),则这是正确的。但我每72个字符就有一个“\n”分隔符。