将库包含在jar中

2024-04-22

好的,这就是我们得到的:

我们有两个库包,我们已将它们编译成 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 . 
  

and



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

一切都很好地装进了我们的罐子里。

现在我们想将这两个 jar 包含到另一个 java 项目中。

所以我们有

  • /project/src/a_pack/HelloWorld.java
  • /project/libs/starwars.jar
  • /project/libs/barwars.jar
  • /项目/清单.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(); 
    }

}
  

清单.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 文件移动到其他地方,并尝试运行它,那么我会得到:

Exception in thread "main" java.lang.NoClassDefFoundError: starwars/JarJar

现在我可以通过将 libs 文件夹移动到移动 jar 的任何位置来解决此问题。但这让我觉得很混乱(如果该位置已经有一个 libs 文件夹怎么办?)。

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

这可能吗? (这是好的做法吗?)


有可能,是的。好的做法,不。

jar 只是 zip 文件,因此您可以解压并重新压缩到您想要的内容。更大的问题是随着项目变得越来越大,管理所有这些单独的 jar 包。

大多数项目不使用命令行进行编译。相反,IDE 可以让您的 jar 保持最新。大多数现代 Java 项目都使用 Maven 或 Ivy 将 jar 放入存储库中并根据需要将其取出。

查看 Eclipse、Netbeans 或 Intellij 的 IDE。并研究 Maven 来构建您的项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将库包含在jar中 的相关文章

  • 从文本文件中读取阿拉伯字符

    我完成了一个项目 在该项目中我读取了用记事本编写的文本文件 我的文本文件中的字符是阿拉伯语 文件编码类型是UTF 8 当在 Netbeans 7 0 1 中启动我的项目时 一切似乎都正常 但是当我将项目构建为 jar 文件时 字符以这种方式
  • 在 Java 中使用 Batik 检查和删除 SVG 中的属性

    这个问题基本上说明了一切 如何检查 SVG 是否具有 viewBox 属性 我正在使用蜡染库 我需要这个 因为我需要 至少 通知用户有一个 viewBox 属性 我可以删除它吗 使用 org w3c dom 类 您可以按照以下方式做一些事情
  • 使类只能从特定类实例化

    假设我有 3 节课class1 class2 and class3 我怎样才能拥有它class1只能通过实例化class2 class1 object new class1 但不是 class3 或任何其他类 我认为它应该与修饰符一起使用
  • 查询 MongoDB 集合中的字段。

    我正在尝试查询 mongodb 集合中的特定字段 这是我的代码和输出 Mongo m new Mongo DB db m getDB mydb DBCollection coll db getCollection student addin
  • 记录共享和映射的诊断上下文

    据我所知 其他人做了什么来解决 Commons Logging 项目 针对 NET 和 Java 不支持映射或嵌套诊断上下文这一事实 执行摘要 我们选择直接使用实现者日志框架 在我们的例子中为 log4j 长答案 您是否需要一个抽象日志框架
  • 这个等待通知线程语义的真正目的是什么?

    我刚刚遇到一些代码 它使用等待通知构造通过其其他成员方法与类中定义的线程进行通信 有趣的是 获取锁后 同步范围内的所有线程都会在同一锁上进行定时等待 请参见下面的代码片段 随后 在非同步作用域中 线程执行其关键函数 即 做一些有用的事情1
  • 在尝试使用 GPS 之前如何检查 GPS 是否已启用

    我有以下代码 但效果不好 因为有时 GPS 需要很长时间 我该如何执行以下操作 检查GPS是否启用 如果启用了 GPS 请使用 GPS 否则请使用网络提供商 如果 GPS 时间超过 30 秒 请使用网络 我可以使用时间或 Thread sl
  • 拆分/标记化/扫描字符串并注意引号

    Java中是否有默认 简单的方法来分割字符串 但要注意引号或其他符号 例如 给定以下文本 There s a man that live next door in my neighborhood and he gets me down Ob
  • JUNIT 测试 void 方法

    我有一个充满 void 方法的 java 类 我想进行一些单元测试以获得最大的代码覆盖率 例如我有这个方法 protected static void checkifValidElements int arg1 int arg2 metho
  • 如何在不反编译的情况下更改已编译的.class文件?

    我想更改 class 文件方法 我安装 JD Eclipse Decompiler 并打开 class 文件 我添加了一些代码并保存 class 文件 但是 class 文件没有改变 我不知道如何使用反编译器 如果可能的话 如何在不使用反编
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 如何以编程方式创建 CardView

    我正在开发一个 Android 应用程序Java Android Studio 我想在活动中创建CardView以编程方式 我想将以下属性设置为CardView layout width wrap content layout row 0
  • 如何使用Gson仅从Json反序列化某些特定字段?

    我有以下 JSON 字符串 channel bvmt initValues data value instrumentIds TN0007250012 TN0007500010 instruments mnemonic ADWYA marc
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • 受信任的 1.5 小程序可以执行系统命令吗?

    如果是的话 这个能力有什么限制吗 具体来说 我需要以 Mac OSX 为目标 我以前用过这个在 Windows 系统上启动东西 但从未在 Mac 上尝试过 public void launchScript String args Strin
  • Java/MongoDB 按日期查询

    我将一个值作为 java util Date 存储在我的集合中 但是当我查询以获取两个特定日期之间的值时 我最终得到的值超出了范围 这是我的代码 插入 BasicDBObject object new BasicDBObject objec
  • 决策树和规则引擎 (Drools)

    In the application that I m working on right now I need to periodically check eligibility of tens of thousands of object
  • Java中单例的其他方式[重复]

    这个问题在这里已经有答案了 只是我在考虑编写单例类的其他方法 那么这个类是否被认为是单例类呢 public class MyClass static Myclass myclass static myclass new MyClass pr
  • mybatis:使用带有 XML 配置的映射器接口作为全局参数

    我喜欢使用 XML 表示法来指定全局参数 例如连接字符串 我也喜欢 Mapper 注释 当我尝试将两者结合起来时 我得到这个例外 https stackoverflow com questions 4263832 type interfac
  • java中void的作用是什么?

    返回类型 方法返回值的数据类型 如果方法不返回值 则返回 void http download oracle com javase tutorial java javaOO methods html http download oracle

随机推荐

  • 将 WatiN 连接到 Firefox

    使用 WatiN 我面临一些问题 FireFox FF new FireFox http www google com FireFox 总是在此时崩溃 VS 报告 无法从传输中读取数据 连接 现有连接是 被远程主机强行关闭 知道为什么会发生
  • 获取剑道网格中的点击事件

    我正在尝试获取 Kendo Grid 的单击事件 以便我可以将内容绑定到 Shift 和 Ctrl 单击 我无法使用 Kendo 提供的固有多选功能 因为它不支持拖放 当我在 dataBound 事件之后创建函数时 我的函数会在单击时被调用
  • 当绘制的数据发生更改时,在 R 中更新绘图,无需重新创建小部件

    每次 R 在闪亮 或仅在 R 中创建一个绘图对象时 该小部件都会完全重新创建 对于小数据集 这不是问题 但我正在处理包含数千个散点的绘图 这使得在我的闪亮应用程序中重新创建绘图需要 10 20 秒 我正在寻找一种通过 JavaScript
  • 从 IIS 7/8 中的静态内容中删除服务器标头

    为了使我们的 API 和网站更加安全 我将删除那些泄露网站运行信息的标头 剥离标头之前的示例 HTTP 1 1 500 Internal Server Error Cache Control private Content Type tex
  • 使用 $.ajax 或 $.post 调用 MVC 5 控制器方法

    我正在尝试使用 JavaScript 设置从 MVC 页面到控制器的非常简单的调用 这是我的控制器 Imports System Web Mvc Namespace Controllers Public Class DataControll
  • 如何在 LaunchStoryboard 中显示 CFBundleShortVersionString?

    有没有办法在我的 LaunchStoryboard 中将 CFBundleShortVersionString 显示为 UILabel 文本 而无需在每次递增时手动输入它 我知道如何在代码中执行此操作 但在显示 LaunchStoryboa
  • 如何在 PHP CLI 中检测 STDOUT 重定向?

    我有一个 PHP CLI 脚本 它使用 shell 转义序列进行粗体显示 但我希望能够在脚本重定向 例如重定向到日志文件 时自动禁用这些序列 到目前为止 我可以找到在除 PHP 之外的所有内容中检测 STDOUT 重定向的方法 所以有人可以
  • Rmarkdown 到 Word 输出 - 在标题上方插入图像

    我有一个 Rmarkdown 文档 我正在将其输出到 Word 并且我正在尝试将公司徽标插入到页面顶部 位于包含标题和作者的标题上方 我还没有找到解决这个问题的办法 我尝试过使用pandoc args to include in heade
  • 更改 NuGet 包位置文件夹

    我想改变NuGet包文件夹 但它不会改变它 我所做的是创建文件nuget config
  • Java Try 和 Catch IOException 必须被捕获或声明为抛出

    我正在尝试使用我在底部找到的一些代码这一页 https stackoverflow com questions 453018 number of lines in a file in java 这是我为其创建的类中的代码 import ja
  • 为什么 DataBinding 没有传播到 UserControl

    今天早上我问了一个问题here https stackoverflow com questions 39835222 command binding is not propagating for control into a datatem
  • aspnet Identity 中的实体框架缓存

    我正在 EF6 和 aspnet Identity 中构建一个项目 我面临以下问题 如果我打电话 var account await FindByNameAsync userName account IsConfirmed true 我得到
  • ElasticSearch:对聚合键进行排序,不区分大小写,并保持键的大小写

    我想从汽车中获得不同的制造值 并且制造值应该不区分大小写地按升序排序 我使用的是elasticsearch版本2 4 4 颜色和制作字段的映射 color type string fields keyword type string ind
  • FutureBuilder 使我的应用程序冻结,因为它在构建之前等待文件加载

    我正在编写一个非常基本的 flutter 应用程序 用于阅读公共领域的书籍 我在应用程序的资产中包含了一个包含一本书的 txt 文件 因为一本书很长并且需要时间来加载 所以我尝试使用 FutureBuilder 它会在加载书籍时显示圆形进度
  • 如何查看 Flamegraph .cpuprofile 文件

    我正在比较应用程序的几个分支上的 cpu 配置文件 并且我已从控制台下载了 cpuprofile 文件 我想并排比较它们 但我不清楚如何打开保存的文件 UPDATE 火焰图 网页版 http thlorenz com flamegraph
  • Flask-admin 无法识别模型视图中的 current_user

    我在 Flask admin 中创建了 ModelView 并希望为用户提供角色选择 以便只有管理员才能创建具有角色经理 管理员或用户的用户 用户不应该选择授予管理员权限或类似的权限 我正在尝试这段代码 但它给了我 AttributeErr
  • 在 Vim 中将 DOS/Windows 行结尾转换为 Linux 行结尾

    如果我打开在 Windows 中创建的文件 所有行都以 M 如何一次性删除这些字符 dos2unix https sourceforge net projects dos2unix是一个可以执行此操作的命令行实用程序 In Vim s M
  • 初学者 WCF 问题 - 可使用的异步服务

    这是一个更多的 能不能做到 的问题 而不是 如何做到 的问题 我正在考虑构建一个服务 中间层 net 提供数据抽象和一些业务逻辑 该服务将由不同平台上的多个内部客户端系统使用 例如 一个客户端可能是一个网站 另一个客户端可能是一些 Java
  • 为什么 Intellij 在 pom.xml 中找不到任何 Maven 依赖项?

    我刚刚在笔记本电脑上下载了 Intellij 并导入了一个 Maven 项目 问题是 Intellij 在 pom xml 中没有找到任何依赖项 例如 如果我尝试导入 hibernate core 或任何其他依赖项 我会收到错误 依赖项 o
  • 将库包含在jar中

    好的 这就是我们得到的 我们有两个库包 我们已将它们编译成 jar package starwars public class JarJar public void JarSayHello System out println Jaaaaa