Как добавить "все разрешения" для манифеста файла с Maven в сочетании с плагином Webstart Maven?

недавно я начал экспериментировать с Maven. В качестве теста я пытаюсь создать простое приложение JavaFX8 webstart.

для этого я использовал образец JavaFX в категории Maven в Netbeans 8. Это дает мне простое приложение HelloWorld:

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. Это был выход:

jarsigner

Я скопировал запуск.у jnlp и mavenprojectHelloWorld-1.0-снимок.Джар файл на мой веб-хост (http:/ / (my_url) / maven) и запустил приложение HelloWorld, запустив файл JNLP. Однако, когда я это делаю, я получаю сообщение "Java Application Blocked" окно и "ошибка приложения" после этого:

java application blocked

application error

консоль 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-плагин разрывает приложение