我還在學習JavaFX的細節。一個主要的區別是在dist文件夾(除了庫)之外,我發現除了.jar文件外,還有一個HTML文件和一個JNLP文件,既沒有對我有用(這將是桌面應用程序)。如何將JavaFX應用程序簽名並部署到單個.JAR中?
我發現了以下(因爲敏感/無關信息省略屬性):
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
<delete dir = "${build.output.dir}"/>
<mkdir dir = "${build.output.dir}"/>
<signjar
jar = "${store.jar}"
signedjar = "${build.output.dir}/${FileName}"
alias = "${comodo.key.alias}"
storepass = "${comodo.key.storepass}"
keystore = "${comodo.key.store}"
storetype = "PKCS12"
keypass = "${comodo.key.pass}"
tsaurl = "${timestamp.url}"/>
這是爲了建立兩個「可執行」 MAIN JAR和所有相關的庫成一個單一的。 JAR可以從任何位置運行,然後拿起並簽名該JAR並將其移動到「簽名」目錄中。
這對於任何JAR庫或Swing GUI應用程序的JAR工作正常,但是當我試圖用JavaFX應用程序一樣的東西它borked:
Error: Could not find or load main class com.javafx.main.Main
我不完全驚訝地發現它不能正常工作,但它有點問題。我做了一些關於可能部署「獨立」應用程序的研究,但這不符合我們的需求。我的僱主在某種程度上採購了Comodo證書,並且我很快遇到了一堵牆,看起來由於Apple的詭計(除非我錯誤地認爲這種推定),您必須加入他們的開發者俱樂部,以$ 100 a的低廉價格一年(沒有發生)。我並不真正爲蘋果平臺開發。我在做Java開發。無論如何,如果我是正確的,將不適合我們這樣一個獨立的Windows,Linux和Mac的部署出來(再次,如果我是正確的)。
我希望這是簡單的事情。
那麼,如何將我創建的ANT腳本應用於將包含所有相關LIB的JAR編譯爲帶有代碼簽名JAR的JavaFX應用程序?
編輯1:好吧,所以肯定說得太快。不是非常接近答案。我試圖frankenstein關於編譯和簽名常規JAR文件的知識,以便所有庫都包含在內,並且該符號能夠成功從我已經能夠從manual中挑選出來。我擁有的是大雜燴和失敗。除了主要的.JAR文件外,我還得到一個包含所有內容的.JAR文件。反正這是Ant腳本代碼:
屬性:
<property name = "name"
value = "APPNAME"/>
<property name = "file"
value = "APPJAR"/>
<property name = "MC"
value = "MAINPACKAGE.MAINCLASS" />
<property name = "released.dir"
value = "released"/>
<property name = "compiled.dir"
value = "${released.dir}/compiled"/>
<property name = "stored.dir"
value = "${released.dir}/stored"/>
<property name = "signed.dir"
value = "${released.dir}/signed"/>
其他的一切:
<delete dir = "${released.dir}"/>
<mkdir dir = "${compiled.dir}"/>
<fx:jar destfile = "dist/compiled.jar">
<fx:platform javafx = "8.0+" j2se = "8.0"/>
<fx:application name = "${name}"
mainClass = "${MC}"/>
<fileset dir = "build/classes"/>
<fx:resources>
<fx:fileset dir = "dist" includes = "lib/*.jar"/>
</fx:resources>
</fx:jar>
<fx:signjar keystore = "${comodo.key.store}"
alias = "${comodo.key.alias}"
storetype = "PKCS12"
keypass = "${comodo.key.pass}"
storepass = "${comodo.key.storepass}"
jar = "dist/compiled.jar"
destdir = "${compiled.dir}"/>
<mkdir dir = "${stored.dir}"/>
<jar destFile = "${stored.dir}/temp_final.jar"
filesetmanifest = "skip" >
<zipgroupfileset dir = "${compiled.dir}"
includes = "compiled.jar"/>
<zipgroupfileset dir = "dist/lib"
includes = "*.jar"/>
<manifest>
<attribute name = "Main-Class"
value = "${main.class}"/>
</manifest>
</jar>
<zip destfile = "${stored.dir}/${file}">
<zipfileset src = "${stored.dir}/temp_final.jar"
excludes = "META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${stored.dir}/temp_final.jar"/>
<mkdir dir = "${signed.dir}"/>
<signjar
keystore = "${comodo.key.store}"
alias = "${comodo.key.alias}"
storetype = "PKCS12"
tsaurl = "${timestamp.url}"
keypass = "${comodo.key.pass}"
storepass = "${comodo.key.storepass}"
jar = "${stored.dir}/${file}"
destdir = "${signed.dir}"/>
而這正是我要顯示我的時間。如果任何人都能從中獲得一些可能讓我走上正軌的東西(如果我離得很近,我不覺得自己就是這樣),那就太棒了。
可能已經找到了一個諮詢文檔的答案。不要認爲這會很容易... – Will