JNLP規範說,可選地,JNLP文件本身可以通過將其包含在JNLP應用程序的主jar(本身必須簽名)中進行簽名。有誰知道如果maven-webstart插件可以做到這一點?maven-webstart-plugin能否自己簽署JNLP文件?
3
A
回答
4
3
JNLP簽名(自動生成APPLICATION.JNLP或APPLICATION_TEMPLATE.JNLP)可以用幾個maven插件組合完成。通常,webstart-maven-plugin執行完整的工作,包括在Maven模塊中打包工件(例如zip文件)。做JNLP簽約的關鍵是這個任務分成幾個步驟:
A)爲APPLICATION.JNLP代:
- 生成JNLP和簽署所有庫(包括清單條目 更新)到目錄/目標與在webstart-行家-插件
- 拷貝&重命名jnlp文件從/目標/ JNLP DIR到 目標/ JNLP/main.jar文件/ JNLP-INF /與 truezip-行家-插件APPLICATION.JNLP
- repeately/JNLP在target/jnlp/ma中籤名main.jar文件in.jar與 maven-jarsigner-plugin
- package/target/jnlp directory to artifact例如與 行家-戰爭插件或行家組裝-插件
B)爲APPLICATION_TEMPLATE.JNLP代(點1和2從前面的步驟不同):
- 產生兩個:JNLP, APPLICATION_TEMPLATE.JNLP並簽署所有 庫(包括清單條目更新)到目錄 /目標/ JNLP與Webstart的,Maven的插件
- 移動APPLICATION_TEMPLATE.JNLP文件從 /target/jnlp/APPLICATION_TEMPLATE.JNLP目標/ JNLP /的main.jar/JNLP-INF/APPLICATION_TEMPLATE的.jnlp與truezip-行家-插件
- repeately登錄目標/ JNLP/main.jar文件文件的main.jar與行家-的jarsigner-插件
- 包/目標/ JNLP目錄僞像例如與 Maven的戰爭插件或Maven的組裝插件
注1:文件的main.jar簽訂兩次(1級)和3)),這是開銷比較簽署所有罐子只有一次在步驟3)通過maven-jarsigner-plugin。但我們需要這樣做,因爲webstart-maven-plugin僅通過配置的簽名更新清單文件(具有許可頭)。注意2:當webstart應用程序具有許多不同的構建配置文件時,此方法運行良好,因爲APPLICATION.JNLP或APPLICATION_TEMPLATE.JNLP是基於配置文件以自動方式生成的。
注3:需要我比1,這一天的一半以上,以開發和測試這種方法,希望它讓你的生活更輕鬆;)
下面是兩種類型的JNLP簽署的某些部分的pom.xml 。 A)用於應用。JNLP代:
<project ....>
...
<build>
<plugins>
<plugin>
<!-- Step 1) your obvious configuration, also with signing,
assume that generated jnlp file has name: launch.jnlp -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>webstart-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-jnlp-and-sign-libs</id>
<phase>generate-resources</phase>
<goals>
<goal>jnlp-inline</goal>
</goals>
...
</execution>
</executions>
...
</plugin>
<plugin>
<!-- Step 2) copy & rename of jnlp to APPLICATION_JNLP in main.jar -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>truezip-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>copy-jnlp-template</id>
<goals>
<goal>copy</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<files>
<file>
<source>${project.build.directory}/jnlp/launch.jnlp</source>
<outputDirectory>${project.build.directory}/jnlp/main.jar/JNLP-INF</outputDirectory>
<destName>APPLICATION.JNLP</destName>
</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!-- Step 3) repeat signing of main.jar -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>sign</id>
<phase>prepare-package</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<archiveDirectory>${project.build.directory}/jnlp</archiveDirectory>
<includes>
<include>main.jar</include>
</includes>
<keystore>...</keystore>
<storepass>...</storepass>
<alias>...</alias>
<verbose>true</verbose>
</configuration>
</plugin>
<plugin>
<!-- Step 4) custom packaging -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven-war-plugin.version}</version>
<configuration>
...
<webResources>
<resource>
<directory>${project.build.directory}/jnlp</directory>
</resource>
...
</webResources>
...
</configuration>
</plugin>
</build>
</project>
B)爲APPLICATION_TEMPLATE.JNLP代:
<project ....>
...
<build>
<plugins>
<plugin>
<!-- Step 1) your obvious configuration + added one new execution
for APPLICATION_TEMPLATE.jnlp file generation from template stored
in /templates/APPLICATION_TEMPLATE.jnlp dir -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>webstart-maven-plugin</artifactId>
<executions>
<execution>
<!-- This is new execution block, don't be afraid,
inspite of multiple executions
signing and manifest update is performed only once -->
<id>generate-jnlp-template-for-signing</id>
<phase>generate-resources</phase>
<goals>
<goal>jnlp-inline</goal>
</goals>
<configuration>
<jnlp>
<inputTemplateResourcePath>${project.basedir}/templates
</inputTemplateResourcePath>
<inputTemplate>APPLICATION_TEMPLATE.jnlp</inputTemplate>
<outputFile>APPLICATION_TEMPLATE.jnlp</outputFile>
<mainClass>...</mainClass>
</jnlp>
</configuration>
</execution>
<execution>
<id>generate-jnlp-and-sign-libs</id>
<phase>generate-resources</phase>
<goals>
<goal>jnlp-inline</goal>
</goals>
<configuration>
<jnlp>
<!-- JNLP settings from your obvious configuration -->
...
</jnlp>
</configuration>
...
</execution>
</executions>
...
</plugin>
<plugin>
<!-- Step 2) move to APPLICATION_TEMPLATE from /target/jnlp
to target/jnlp/main.jar/JNLP-INF dir -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>truezip-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>move-jnlp-template</id>
<goals>
<goal>move</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<from>${project.build.directory}/jnlp/APPLICATION_TEMPLATE.jnlp
</from>
<to>${project.build.directory}/jnlp/lib/main.jar/JNLP-INF/APPLICATION_TEMPLATE.jnlp
</to>
</configuration>
</execution>
</executions>
</plugin>
<!-- Steps 3) and 4) are same as in previous code block -->
</build>
</project>
相關問題
- 1. 簽名JNLP文件
- 2. 是否有可能使用jnlp而不簽署罐子?
- 3. 簽署jnlp以擺脫安全警告
- 4. phpseclib用自己的CA簽署CSR
- 5. 部署規則集是否允許JNLP運行而不簽署瓶子?
- 6. 沒有.jnlp擴展名的jnlp文件? jnlp是否負責啓動沙箱?
- 7. 是否可以簽署MSBuild文件?
- 8. 文本文件+ JNLP
- 9. 是否有可能使用snk文件簽署PowerShell腳本?
- 10. 簽署PDF文件
- 11. JNLP文件自動更新問題
- 12. JNLP不會自動更新JAR文件
- 13. 是否有可能禁用android studio生成自己的文件?
- 14. 我能否添加自己的標籤,離線地圖
- 15. 用自己的DLL部署QT插件
- 16. 部署的Applet與JNLP
- 17. 是否需要簽署者以DocuSign賬戶簽署文檔?
- 18. 檢查JAR文件是否被JNLP文件/ Java Web Start調用
- 19. 是否有可能得到使用JNLP
- 20. 在服務器中部署更多Jar文件(自己)
- 21. 如何在Artifactory中部署自己的Jar文件?
- 22. 重新簽署xcarchive文件
- 23. silverlight 5簽署xap文件
- 24. 無法簽署XAP文件
- 25. 簽署出租車文件
- 26. 簽署我的Jar文件
- 27. 重新簽署IPA文件
- 28. 如何使用Maven簽署多個JNLP應用程序
- 29. 您是否爲自己的移動設備編寫自己的CSS文件?
- 30. 創建自己的證書用於簽署程序集
我敢肯定的插件被稱爲 '在webstart - Maven的插件' –