首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.util.zip.ZipException:重复条目: META_INF/LICENSE.txt

java.util.zip.ZipException:重复条目: META_INF/LICENSE.txt
EN

Stack Overflow用户
提问于 2016-01-26 17:27:20
回答 2查看 4.1K关注 0票数 1

这是我第一次使用。这是我的应用程序的演示版本。我已经将JAR上传到服务器,并创建了一个JNLP文件。当我在本地运行该文件时,会得到下面所示的异常。

是我正在阅读的参考,下面是我的JNLP文件。

DerbyPro.jnlp

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
    <information>
        <title>Derby Pro</title>
        <vendor>Neon Orb</vendor>
        <icon href="http://neonorb.com/images/derby-pro/derby-pro-icon-hd.png"/>
        <offline-allowed/>
    </information>

    <resources>
        <j2se version="1.8+" href=
                "http://neonorb.com"/>
        <jar href="http://neonorb.com/clientportal/derby-pro-demo.jar"
             main="true" />
    </resources>

    <application-desc
            name="Derby Pro"
            main-class="com.neonorb.derbypro.main.DerbyPro"
            width="300"
            height="300">
    </application-desc>

    <update check="background"/>
</jnlp>

下面是正在调用的build.gradle文件,如下所示:./gradlew -Pversion=0.0.0 -Pdemo=true fatJar

代码语言:javascript
复制
group 'com.neonorb'

apply plugin: 'java'

sourceCompatibility = 1.8

project.description = 'Derby Pro is pinewood derby management software.'

//create a single Jar with all dependencies
task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Version': version,
                'Main-Class': 'com.neonorb.derbypro.main.DerbyPro',
                'Demo': demo
    }
    baseName = project.name
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

repositories {
    mavenCentral()
    maven {
        url "http://www.sparetimelabs.com/maven2"
    }
    mavenLocal()
}

dependencies {
    compile files('dfalex-0.9.2.jar')
    compile 'com.neonorb:commons:+'
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.5.4'
    compile group: 'commons-cli', name: 'commons-cli', version: '1.3.1'
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.4'
    compile group: 'org.controlsfx', name: 'controlsfx', version: '8.40.10'
    compile group: 'org.fxmisc.easybind', name: 'easybind', version: '1.0.3'
    compile group: 'org.scream3r', name: 'jssc', version: '2.8.0'
    compile group: 'com.sparetimelabs', name: 'purejavacomm', version: '0.0.28'
    compile 'net.java.dev.jna:jna:4.2.1'
    compile 'commons-io:commons-io:2.4'
    testCompile group: 'junit', name: 'junit', version: '4.11'
    testCompile 'net.jodah:concurrentunit:0.4.2'
}

//Native launchers

//Windows

buildscript {
    repositories {
        maven {
            url 'https://plugins.gradle.org/m2/'
        }
    }
    dependencies {
        classpath 'gradle.plugin.edu.sc.seis.gradle:launch4j:1.6.1'
    }
}

apply plugin: 'edu.sc.seis.launch4j'

launch4j {
    //outputDir = 'native/windows'
    bundledJrePath = 'jre'

    dontWrapJar = true
    jar = 'bin/derby-pro.jar'

    mainClassName = 'com.neonorb.derbypro.main.DerbyPro'
    icon = '../../src/main/resources/com/neonorb/derbypro/assets/derby-pro-icon-favicon.ico'
    outfile = 'DerbyPro.exe'

    companyName = 'Neon Orb'
    productName = 'Derby Pro'
}

//OS X

/*plugins {
    id "edu.sc.seis.macAppBundle" version "2.1.0"
}

macAppBundle {
    mainClassName = "com.example.myApp.Start"
    icon = "myIcon.icns"
    bundleJRE = true
    javaProperties.put("apple.laf.useScreenMenuBar", "true")
    backgroundImage = "doc/macbackground.png"
}*/

这是清单目录。

这是清单的内容。

代码语言:javascript
复制
Manifest-Version: 1.0
Implementation-Version: 0.0.0
Main-Class: com.neonorb.derbypro.main.DerbyPro
Demo: true
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-26 20:23:02

jar文件包含重复的条目,在部署时可能会造成问题。如果您在jar文件中运行以下命令,您将看到重复的条目:

代码语言:javascript
复制
$ unzip -l derby-pro-demo.jar |grep META
        0  01-26-16 11:47   META-INF/
      116  01-26-16 11:47   META-INF/MANIFEST.MF
      321  06-09-15 18:42   META-INF/LICENSE
      825  06-09-15 18:42   META-INF/NOTICE
...
    11358  06-14-15 12:06   META-INF/LICENSE.txt
      172  06-14-15 12:06   META-INF/NOTICE.txt
...
    11358  04-03-15 14:30   META-INF/LICENSE.txt
      301  04-03-15 14:30   META-INF/NOTICE.txt

这个问题是由fatJar引起的。见这里这里

在创建fat jar时,应该解析重复的条目。我对gradle没有经验。问题(第一个链接)仍然标记为“打开”,所以我认为可能没有一个简单的修复。作为一项工作(如果这是可能的,并且适合您),我可以想象首先将所有jar内容复制到一个临时目录。这将覆盖重复的条目。然后可以从临时目录构建fat jar。不过,我会非常小心的。首先,一些重复的类文件可能是相关的,其次,许可证、通知等文件肯定会导致许可证问题。

票数 2
EN

Stack Overflow用户

发布于 2016-01-26 20:22:06

JNLP文件包含一个主类属性,Java试图使用该主类创建清单。因此,从JNLP文件中删除main class属性使其能够运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35020003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档