2017-09-25 81 views
4

我有三個應用程序使用Java Web Start部署到客戶端。所有這三個應用程序都使用JAXB。在的Java 1.9,以獲得JAXB模塊加載,你必須使用:如何在通過Java Web部署時運行在Java 1.9下使用JAXB的代碼開始

--add-modules java.xml.bind 

Java Web Start的讓你通過VM參數與Java/J2SE標籤中的java-VM-ARGS屬性的應用程序。但是,只支持文檔中列出的參數並且--add-modules不在that list中。

所以問題是如何通過使用JAXB的Java Web Start運行代碼時,將"--add-modules java.xml.bind"傳遞給1.9 VM?

這裏是我想和我的測試表明,--add模塊的確不是由Java-VM-arg屬性的支持:

<resources> 
    <property name="jnlp.packEnabled" value="true"/> 
    <java version="9" java-vm-args="--add-modules java.xml.bind"/> 
    <java version="1.8+"/> 
    <jar href="redacted.jar"/> 
</resources> 

回答

2

根據Java 9遷移文檔--add-modulesModules Shared with Java EE Not Resolved by Default部分是一種解決方法,因爲JAXB將來將從JDK中刪除。因此,要解決這個問題我只包括了JAXB API和我的類路徑的實現,使用ANT +常春藤這種配置讓我我需要的東西:

<dependency org="org.glassfish.jaxb" name="jaxb-runtime" rev="2.3.0"/> 
<dependency org="org.glassfish.jaxb" name="jaxb-core" rev="2.3.0"/> 
<dependency org="javax.xml.bind" name="jaxb-api" rev="2.3.0"/> 
<dependency org="javax.activation" name="activation" rev="1.1.1"/> 

少數傳遞依賴它(FastInfoset,iStack技術公地來了,stax-ex和txw2)。這些是桌面搖擺應用程序,所以我喜歡儘可能小地保留jar文件,在pack200壓縮後它只添加了大約600K到我的胖罐。

glassfish實現確實會導致來自Java 9的非法反射訪問警告。我認爲即將推出的更新不會使用非法反射。

+1

.. + 1 – nullpointer

1

使用等號,而不是空間。此外,模塊名稱是「java.xml.bind」。這給你java-vm-args="--add-modules=java.xml.bind"

+0

這是--add-modules參數的錯誤語法。它不需要等號:--add-modules [, ...]。然而,你確實是正確的,它是「java」而不是「javax」。我正在修復和測試(從命令行測試時它是正確的,但在編輯JNLP時輸入錯誤)。 – Michael

+0

當我的應用程序啓動時,將其更改爲java.xml.bind仍導致出現「Thread-9」java.lang.NoClassDefFoundError:javax/xml/bind/JAXBException。這似乎是因爲--add-modules不受JNLP「java」標記的java-vm-args屬性支持。 – Michael

+0

JEP 293(http://openjdk.java.net/jeps/293)具有CLI選項的準則。對於'java'和'javac'啓動,那麼你可以使用空格或等號作爲分隔符,對於API和其他用法,則只能使用equals。 –

1

參照相同的文檔,你應該改變使用版本爲99+(EA版本)爲:

<resources> 
    <property name="jnlp.packEnabled" value="true"/> 
    <j2se version="9" java-vm-args="--add-modules java.xml.bind"/> 
    <j2se version="1.8+"/> 
    <jar href="redacted.jar"/> 
</resources> 

The version attribute refers, by default, to a platform version (specification version) of the Java Platform Standard Edition. Currently defined platform versions are 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, and 9. (A platform version does not usually contain a micro version number; for example 1.4.2.)


,我也做了thisthat答案之前,以解釋一個永久性的解決方案,而不是對依賴於java.xml.bind的代碼進行臨時修復,這已被棄用。

+0

你能分享你發現的鏈接嗎?Java 9 JNLP文檔的全文搜索沒有發現這種語言。 – Michael

+1

該文檔適用於ANT任務,該任務對應於作爲JDK一部分的「javapackager」命令行工具,該工具可用於構建本機可執行文件。它不適用於Java Web Start。 – Michael

+0

@Michael我的不好,但可能更改版本應該在這裏工作 – nullpointer

相關問題