2016-01-26 91 views
0

這是我第一次使用Java Web Start。這是我的應用程序的演示版本。我已將JAR上傳到我的服務器,並創建了一個JNLP文件。當我在本地運行文件時,出現如下所示的異常。java.util.zip.ZipException:重複項:META_INF/LICENSE.txt

enter image description here

This是我在閱讀參考,以下是我的JNLP文件。

DerbyPro.jnlp

<?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

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" 
}*/ 

這裏是清單目錄。

enter image description here

這裏是清單的內容。

Manifest-Version: 1.0 
Implementation-Version: 0.0.0 
Main-Class: com.neonorb.derbypro.main.DerbyPro 
Demo: true 

回答

1

您的jar文件包含重複的條目,這些條目在部署時可能會導致問題。如果您用您的jar文件下面的命令,你會看到重複的條目:

$ 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引起的。請參閱herehere

當創建一個fat jar時,重複的條目應該被解析。我沒有Gradle的經驗。問題(第一個鏈接)仍然標記爲「打開」,所以我認爲可能沒有簡單的解決方法。作爲一個解決方法(如果這是可能的並且適用於您),我可以想象將所有jar內容首先複製到臨時目錄。這會覆蓋重複的條目。然後你可以從臨時目錄建立fat jar。不過,我會非常小心的。首先一些重複的類文件可能是相關的,其次是許可證,通知等文件肯定會導致許可證問題。

0

JNLP文件包含一個主要的類屬性,Java Web Start試圖用該主類創建清單。因此,從JNLP文件中刪除主類屬性允許它運行。

相關問題