从Maven Archetype构建可执行JavaFX Jar的方法

时间:2015-02-15 02:39:01

标签: java maven jar javafx-8 maven-archetype

我希望为一个稳定的JavaFX(Java 8)Maven构建设置一个原型,它将生成一个可执行的JAR(始终)从命令行运行。并且最好不需要构建UberJar or similar

当我们使用Netbeans' Maven JavaFX '原型运行后,生成JAR文件。随着项目的发展,我们发现有时JAR不会从命令行运行。需要进行一些Maven POM编辑才能鼓励'程序从命令行再次运行。这适用于Linux和Windows。

这也直接发生在ZenJava JavaFX原型上,例如:项目artifactId = xx:

 java -jar target\xx.jar
 no main manifest attribute, in target\xx.jar

这只是来自mavan generate命令。有问题的两个原型的细节是:

zenjava

  • archetypeArtifactId = JavaFX的基本-原型
  • archetypeGroupId = com.zenjava

netbeans的

  • archetypeArtifactId = JavaFX的
  • archetypeGroupId = org.codehaus.mojo.archetypes

比较生成的POM文件,显示codehaus.mojo(netbeans)在构建中使用这些插件:

  • 行家依赖性-插件
  • 行家编译-插件
  • EXEC-行家-插件

任何一个项目都可以在Netbeans IDE中快乐地运行。当我们想要在命令行上进行测试时,就会出现挑战。当构建看起来像这样的局外人不稳定时,它在外部并不是最好的外观。

出现的问题是关于制作JavaFX命令行可执行JAR文件的要求是什么?对于JDK 8及更高版本。

  1. 是否有可供选择的JavaFX原型用于构建具有相关JAR-s的项目并从命令行运行?

  2. 当构建的JAR在命令行上运行时,Netbeans()允许执行JAR的原因是什么?

    • 什么' 魔法' Netbeans是否会添加到执行步骤?
  3. zenjava原型运行" Java -jar "

    需要什么?
    • 以下步骤产生的JAR不会在控制台上运行。
    • mvn archetype:generate -DarchetypeGroupId=com.zenjava -DarchetypeArtifactId=javafx-basic-archetype ... -DartifactId=xx
    • mvn install
    • java -jar target/xx-001.jar
  4. 在为更大的项目构建JAR时会对maven-dependency-pluginmaven-compiler-plugin产生什么影响?

    • 换句话说,项目增长并与其他JAR文件绑定可能会破坏哪些假设。
  5. 毋庸置疑,Maven生成和构建步骤正在使用JDK Java环境。但执行java -jar target/xx-001.jar需要在简单的JRE(没有JDK)下运行。我想问题#4是一个漫长的过程,除非你是一个拥有 biggish JavaFX项目的人并且已经解决了这个问题。建议欢迎。

1 个答案:

答案 0 :(得分:0)

提到:我是javafx-maven-plugin(和原型)的维护者。

回答你的问题3:

您必须从插件中调用GENERATED jar文件,该插件位于target/jfx/app/yourapp.jar

生成的jar文件将引用所有必需的依赖项,这些依赖项在其中的META-INF/MANIFEST.MF文件中注明。在创建该jar文件时,会扫描pom以查找运行时依赖项,这些文件将放在target/jfx/app/lib - 文件夹中。将您的应用程序捆绑到本机捆绑包时,JRE会被放置在target/jfx/native/ - 文件夹下生成的启动器旁边。

让您对您的问题感到困惑:混合CLI和GUI应用程序可能会导致问题,但我想这只是您的特殊要求:)

修改: 调用mvn install不会在没有特殊配置的情况下生成jfx-jar,您必须调用mvn jfx:jarmvn jfx:native来调用插件的MOJO。有关更轻松的配置,请访问我们的配置网站:http://javafx-maven-plugin.github.io/