【问题标题】:Getting an executable jar file to run after creation from netbeans从 netbeans 创建后获取可执行 jar 文件以运行
【发布时间】:2015-06-01 16:19:04
【问题描述】:

我的应用程序中包含一些已添加到库中的 jar 文件 在 net beans 中,这些是可以读取和使用的

我试图通过 Clean 和 build 在 netbeans 中创建一个可执行文件,并且我在构建打包集中拥有所有必要的属性,但是当我尝试双击创建的 jar 时,没有任何反应。它应该从我的 Main 类运行 jar

现在我尝试进入 cmd 终端并使用:

java -jar myapp.jar 

我添加了 3 个不同的 jar,包括 sqlite-jdbc3.8.7、AbsoluteLayout、miglayout

但返回的是:

Exception in thread "main" java.lang.RuntimeException: Could not load SQLite JDBC driver
        at myapp.database.DatabaseConProvider.<init>(DatabaseConPr
ovider.java:18)
        at myapp.presenter.AppPresenter.<init>(AppPresenter.java
:32)
        at myapp.Main.main(Main.java:17)
Caused by: java.lang.ClassNotFoundException: org.sqlite.JDBC
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at myapp.database.DatabaseConProvider.<init>(DatabaseConPr
ovider.java:16)
        ... 2 more

问题似乎是它无法访问已添加到项目中的 jar 文件,因为一旦我执行 clean 并构建项目中的 /dist 文件夹只有 myapp.jar 但也应该有 README .txt 和一个包含所有库的 lib 文件夹。如图所示:

http://netbeanside61.blogspot.co.uk/2009/08/making-executable-desktop-application.html

我正在使用带有 netbeans 8.0.2 的 Windows 8

【问题讨论】:

  • 您是否在项目属性的“打包”部分启用了“复制依赖库”?
  • 是的,我有,但它仍然给我这个错误我不知道如果我做得正确,为什么它不加载我的罐子
  • @fooll:你看到我的回答了吗?
  • 当您从 CLI 运行 ant clean jar 时,为 dist 文件夹显示 tree。在那个文件夹中,您的所有运行时依赖项都在那里吗?具体来说,您的项目所依赖的三个 JAR?

标签: java netbeans jar executable


【解决方案1】:

使用资源管理器,您可以转到 .jar 文件的结构。 (或将扩展名 .jar 重命名为 .zip)

  • 可能性 1
    看看MANIFEST.MF 有没有类似的东西

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.7.0_51-b13 (Oracle Corporation)
Class-Path: lib/sqlite-jdbc-3.8.7.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: Find

sqlite-jdbc-3.8.7.jar 位于 GUIFormExamples.jar 之外的 lib/ 文件夹中

  • 可能性 2
    将 sqlite-jdbc-3.8.7.jar 的内容添加到 appxx.jar


  • 案例 1
    将 lib 文件夹放在 appxx.jar 所在的同一文件夹中

  • 案例 2 必须开箱即用

【讨论】:

    【解决方案2】:

    您如何管理您的应用程序依赖项?我鼓励您不要简单地“将 jars 添加到您的 netbeans” - 使用某种项目/依赖管理工具 - MavenGradle

    然后,如果是 Maven,请检查以下答案: https://stackoverflow.com/a/574650/3080422

    将您的应用程序移植到 maven/gradle 项目不会花费太多时间(但不幸的是,学习一个工具肯定会……)并且您获得了很大的灵活性。

    【讨论】:

    • “Netbeans 使用 Maven,并且 maven 具有 lib-dependency 插件,可以自动生成此类条目,扫描 POM 文件中的所有依赖项”我的朋友在她的计算机上尝试了相同的方法,它适用于她相同的项目并通过单击文件创建它但是当我在我的计算机上执行它时它不起作用
    • @fooll git 来救援!更具体地说,github.com 是免费的,还有其他的。不要用无关紧要的东西淹没你,但 NB 中可能有一个设置在项目中,或者不是,这就是差异的原因。 FWIW,特别是 gradle 的痛苦和麻烦,恕我直言,值得。 NB 通过插件支持 gradle。
    猜你喜欢
    • 2018-08-16
    • 2018-04-14
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 2013-08-20
    • 1970-01-01
    相关资源
    最近更新 更多