当前位置: 首页 > 知识库问答 >
问题:

包括jar中的库

包丁雨
2023-03-14

好的,这是我们得到的:

我们有两个库包,我们已经将它们编译成JAR。

package starwars; 
public class JarJar {

    public void JarSayHello()
    {
        System.out.println("Jaaaaar!!"); 
    }

}

package barwars; 
public class BarBar {

    public void BarSayHello()
    {
        System.out.println("Baaaaa!!"); 
    }

}

我们用

javac -d bin -sourcepath src src/barwars/BarBar.java
jar cvf barwars.jar -C bin . 

而且

javac -d bin -sourcepath src src/starwars/JarJar.java
jar cvf starwars.jar -C bin . 

给我们装进罐子里。

现在我们想将这两个罐子包含到另一个Java项目中。

所以我们有

  • /project/src/a_pack/helloworld.
  • /project/libs/starwars.jar
  • /project/libs/barwars.jar
  • /project/manifest.txt
package a_pack;
import starwars.JarJar; 
import barwars.BarBar; 

public class HelloWorld {

    public static void main(String[] args) {    
        System.out.println("Hello, World");         
        JarJar myJar = new JarJar();
        myJar.JarSayHello();        
        BarBar myBar = new BarBar(); 
        myBar.BarSayHello(); 
    }

}

MANIFEST.TXT

Main-Class: a_pack.HelloWorld
Class-Path: libs/starwars.jar libs/barwars.jar

现在我们用以下方法编译:

javac -d bin -sourcepath src -cp "libs/starwars.jar;libs/*" src/a_pack/HelloWorld.java 
jar cvfm helloworld.jar manifest.txt -C bin . 

这会很好地编译和运行。

现在我有两个问题。

首先--如果我将这个jar文件移动到其他地方,并尝试运行它,那么我将得到:

线程“main”java.lang.NoClassDefoundError:Starwars/jarjar异常

现在我可以通过将libs文件夹移动到我移动jar的任何地方来解决这个问题。但这给我的印象是乱七八糟的(如果那个位置已经有一个libs文件夹呢?)。

理想情况下,我想做的是在jar中包含引用的jar,这样就有一个jar包含了在其内部运行所需的所有内容。

这可能吗?(练习好吗?)

共有1个答案

施阎宝
2023-03-14

可能,是的。很好的练习,不。

JAR只是zip文件,所以您可以尽情解压和重新压缩。更大的问题是在项目变大时管理所有这些单独的JAR。

大多数项目不使用命令行进行编译。相反,IDE使您的JAR保持最新。大多数现代Java项目都使用Maven或Ivy将罐子放在存储库中,并根据需要将它们取出。

看看Eclipse、Netbeans或Intellij。并研究Maven对项目的结构化。

 类似资料:
  • 我试图在我的简单Groovy脚本中使用“httpBuilder”。当我使用'@grab'导入依赖项时,一切都运行良好。但是,我希望将jar保存在一个不同的目录中,并使用classLoader函数导入它。我已经复制了“@grab”放在我的grapes目录中的“http-builder-0.7.jar”,并将其粘贴到我的Groovy脚本运行的同一目录中(在Windows上)。然后注释掉“@Grab”语

  • 我已经浏览了Stackoverflow一整天,寻找如何做到这一点,但我还没有成功 我正在将我制作的一个快速游戏打包成一个可执行的jar,但我没有正确地引用图像,我只是引用了文件 我的类在src default package中,我不确定应该在哪里添加映像,或者是否必须将映像添加到构建路径中,或者在最新版本的eclipse中将映像添加到构建路径中的正确方法

  • 问题内容: 我刚刚“继承”了一个Java项目,而不是来自Java背景,有时我会有点迷失。Eclipse用于在开发过程中调试和运行应用程序。我已经通过Eclipse成功创建了一个.jar文件,该文件“包含”了所有必需的外部jar,例如Log4J,xmlrpc- server等。然后可以使用以下命令成功运行此大.jar: 我的下一步是使用Ant(版本1.7.1)自动进行构建,因此我不必参与Eclips

  • 我可以像这样创建sessionfactory bean。 但是,使用带有jar的类路径或列出hbm.xml文件的@EntityScan或@code仍然不能生成托管类型:classcom.opensymphony.workflow.spi.hibernate.HibernateMONtStep 我看到了一些答案,您使用不同的类来生成sessionFactory bean。有没有一种简单的方法可以获取

  • 问题内容: 我需要从Eclipse Java项目中导出jar,并且要包含引用的库。我不能为此使用fatjar,这是每个人似乎都推荐的。必须有另一种方式来执行此操作。有人知道这是什么吗? 问题答案: Eclipse的下一个版本(3.5,将于明年6月发布)具有包含所有必要jar的选项。它是在3.5M5中引入的。 或者,您可以尝试使用Maven 2构建项目。然后,您可以使用构建一个“胖”罐。 另一种选择

  • 我真正需要的是Eclipse与Netbeans的等价物: 我想,这样我就可以分发它,而无需将lib文件夹包含到任何地方。 这是最初的问题。 我试图建立一个罐子出来的网豆,将包装所有的库文件在里面。我听说选择导出可以使用Eclipse。使用Netbean,如果我“清理并构建”,它将在dist文件夹中创建一个可执行的jar,但是它所依赖的所有库都在一个名为lib的文件夹中。我需要它都在一个jar文件中