Как добавить "все разрешения" для манифеста файла с Maven в сочетании с плагином Webstart Maven?
недавно я начал экспериментировать с Maven. В качестве теста я пытаюсь создать простое приложение JavaFX8 webstart.
для этого я использовал образец JavaFX в категории Maven в Netbeans 8. Это дает мне простое приложение HelloWorld:
я добавил новый профиль в свой pom.xml-файл под названием "jnlp". Это позволит создать файл JNLP (используя плагин webstart maven) при создании проект.
....
<profiles>
<profile>
<id>jnlp</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>webstart-maven-plugin</artifactId>
<version>1.0-beta-6</version>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>webstart-pack200-impl</artifactId>
<version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>keytool-api-1.7</artifactId>
<version>1.5</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jnlp</goal>
</goals>
</execution>
</executions>
<configuration>
<codebase>http://(my_url)/maven/</codebase> //replaced the url obviously :)
<jnlp>
<mainClass>com.mycompany.mavenprojecthelloworld.MainApp</mainClass>
</jnlp>
<pack200>
<enabled>false</enabled>
</pack200>
<sign>
<keystore>${project.basedir}/src/main/jnlp/mykeystore</keystore>
<keypass>mykeypass</keypass>
<storepass>mystorepass</storepass>
<alias>myalias</alias>
<verify>true</verify>
</sign>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
когда я создаю это, он генерирует запуск.у jnlp и mavenprojectHelloWorld-1.0-снимок.Джар на . Я дважды проверил с jarsigner, чтобы проверить, правильно ли подписан мой файл jar. Это был выход:
Я скопировал запуск.у jnlp и mavenprojectHelloWorld-1.0-снимок.Джар файл на мой веб-хост (http:/ / (my_url) / maven) и запустил приложение HelloWorld, запустив файл JNLP. Однако, когда я это делаю, я получаю сообщение "Java Application Blocked" окно и "ошибка приложения" после этого:
консоль Java сказала мне следующее:
java.lang.SecurityException: JAR manifest requested to run in sandbox only: http://(my_url)/maven/mavenprojectHelloWorld-1.0-SNAPSHOT.jar
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.prepareLaunchFile(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
после проверки файла манифеста из моего файла JAR я заметил, что разрешения и кода теги пропали. Теперь я хочу добавить их через maven. После некоторых чтение и поиск, я нашел подобный вопрос здесь: самый простой способ добавить атрибут в манифест jar в Maven. Поэтому я попытался добавить следующее К моему pom.XML-код:
<project>
...
<build>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifestEntries>
<Permissions>all-permissions</Permissions>
<Codebase>*</Codebase>
</manifestEntries>
</archive>
</configuration>
</plugin>
...
</build>
</project>
после создания снова, я проверил файл манифеста, чтобы просмотреть мои изменения, но кажется, что файл манифеста не был изменен. Я все еще получаю следующий:
Manifest-Version: 1.0
Permissions: sandbox
JavaFX-Version: 8.0
Created-By: JavaFX Packager
Main-Class: com.mycompany.mavenprojecthelloworld.MainApp
должно быть, я делаю что-то неправильно или не хватает. При чтении о создании файлов JNLP с Maven и редактировании файла манифеста я заметил много старой информации в интернете, которая больше не была действительной. Так что я немного запутался в том, что делать. Надеюсь, кто-нибудь укажет мне верное направление.
31/08/2015 обновления:
забыл упомянуть, что я использую шаблон скорости, вы можете найти шаблон ниже:
<?xml version="1.0" encoding="utf-8"?>
<jnlp
spec="1.0+"
codebase="$jnlpCodebase"
href="$outputFile">
<information>
<title>$project.name</title>
<vendor>$project.Organization.Name</vendor>
<description>$project.Description</description>
</information>
<resources>
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se" />
$dependencies
</resources>
<security>
<all-permissions/>
</security>
<applet-desc width="1024" height="768" main-class="com.javafx.main.NoJavaFXFallback" name="$project.name">
<param name="requiredFXVersion" value="8.0+"/>
</applet-desc>
<jfx:javafx-desc width="1024" height="768" main-class="$mainClass" name="$project.name" />
<update check="background"/>
</jnlp>
еще одна вещь, которую я заметил, это то, что здание с профилем JNLP работает нормально. Но запуск проекта с профилем JNLP (в NetBeans) кажется неудачным (работает с профилем по умолчанию). Я не знаю, имеет ли это какое-либо отношение к этой проблеме или нет (поскольку я еще не знаком с Maven). Однако это вывод в NetBeans при попытке запустить проект:
....
--- exec-maven-plugin:1.2.1:exec (default-cli) @ mavenprojectHelloWorld ---
Error: Could not find or load main class com.mycompany.mavenprojecthelloworld.MainApp
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 1.308s
Finished at: Thu Aug 27 12:00:03 CEST 2015
Final Memory: 8M/155M
------------------------------------------------------------------------
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (default-cli) on project mavenprojectHelloWorld: Command execution failed. Process exited with an error: 1 (Exit value: 1) -> [Help 1]
1 ответов
я снова прошел через информацию о плагине Webstart Maven, и кажется, что я должен использовать <updateManifestEntries>
вместо этого, поэтому я скорректировал свой код следующим образом:
<configuration>
<codebase>...</codebase>
<jnlp>
<mainClass>com.mycompany.mavenprojecthelloworld.MainApp</mainClass>
</jnlp>
<pack200>
<enabled>false</enabled>
</pack200>
<sign>
...
</sign>
<verbose>true</verbose>
<updateManifestEntries>
<Application-Name>HelloWorld</Application-Name>
<Trusted-Library>true</Trusted-Library>
<Permissions>all-permissions</Permissions>
<Codebase>*</Codebase>
<Trusted-Only>true</Trusted-Only>
</updateManifestEntries>
</configuration>
ищем <updateManifestEntries>
Я также наткнулся на этот вопрос, который помог мне дальше: новые записи webstart-Maven-плагин разрывает приложение