JAR 文件的正确内部结构是什么

2023-11-26

这是一个非常愚蠢的问题,我找不到明确的答案。

背景。

我正在使用 Eclipse(在 XP 终端上使用 ANT 插件之一)。

我刚刚开始使用 ANT,在 [jar] 指令中,我正在设置已完成的 JAR 文件的位置,当我“解压缩”该文件时,我得到以下内容

元信息/清单.MF MyMainFile.class

内部结构与oracle网站上找到的一致。 (这里http://docs.oracle.com/javase/tutorial/deployment/jar/view.html )

但是当我尝试运行我的文件时,我收到“找不到主类”错误?

我看过其他一些帖子,人们“解压缩”了 JAR 文件,最终得到了以下结构......

元信息/清单.MF dtvcontrol/DTVControlApp.class

(从这里http://www.coderanch.com/t/528312/java/java/standalone-application)

那么我应该得到一个结构,其中我的类文件位于反映包名称的目录中......例如

元信息/清单.MF MyPackage/MyMainFile.class

如果是这样,为什么我使用 ANT 得到的结构不正确,或者为什么有 2 个不同的“正确”内部结构? (如何为每个指定主类和类路径/控制我得到的内容)

另外,如果您感兴趣,请查看 MANIFEST 文件状态(使用 ANT 构建) [属性名称=“Main-Class”值=“MyPackage.MyMainFile”/]

另外正在开发的包的目录结构如下......

/JavaDev/MyTestPackage/src (包含源文件) //JavaDev/MyTestPackage/bin(包含来自 eclipse 或来自 ANT JAVAC 任务的类文件,我是否命名错误?我应该将其称为 build 吗?)

除此之外,当我创建 jar 时,我没有将其命名为“MyTestPackage.jar”,而是简单地命名为“test.jar”,这可能会导致问题吗?我认为我并没有很好地理解[主类]定义的内容。

除此之外...

“MyTestPackage”实际上是我在其他地方使用的一个小型视觉错误消息传递库,并且我有第二个文件,其中有一个用于测试的主类。因此它指向各种库(我需要将所有 SWT 库复制到指定目录吗?)

我在某处读到,如果我将库加载到我的主类中(我显然是为了打开窗口),那么如果我使用它们,尝试运行程序将因“找不到主类”而失败,添加也是如此在任何“静态最终”成员中(我用它来记录错误)。

“静态最终”问题... 我尝试调整 ANT 中的类路径,并且在连接到 Log4J 和我使用的“包装器”时遇到了很多其他错误(这是一个错误的导入),但是这些库存在于它们应该设置的位置在类路径中)。

我感觉我快到了……但还没有完全……

我正在为我正在创建的小型“库项目”执行此操作,目的是使用 MAVAN 作为将它们连接在一起的主外包......但现在我只想让它继续运行,以便它可以工作。

我可以根据需要提供完整的来源或任何其他信息。

提前致谢...

David


当您知道去哪里寻找时,事情就很简单了。假设您的 META-INF/MANIFEST.MF 包含以下行:

Main-Class: mypackage.MyMainFile

那么 jar 的结构需要是

META-INF/MANIFEST.MF
mypackage/MyMainFile.class

其中 MyMainFile 必须位于正确的包中:

package mypackage;
public class MyMainFile {
  public static void main(String[] args) {
...

您的错误消息是由 MyMainFile 位于错误的位置引起的。

Edit:自从我上次用 ant 这样做已经有一段时间了,但我认为你需要这样的东西:一个反映包结构的源文件结构,比如说

src/main/java/mypackage/MyMainFile.java

以及一个用于放置已编译的类文件的目录,例如

target

(我在这里使用maven约定,ant不关心,你可以使用eclipse中的(右键单击)->属性->Java构建路径->源选项卡将源目录设置为src / main / java和目标目标/类别)。然后在 ant 中,有一个从源编译到目标的编译目标:

<target name="compile">
    <mkdir dir="target/classes"/>
    <javac srcdir="src/main/java" destdir="target/classes"/>
</target> 

这样之后ant compile你应该在目标中看到类文件

target/classes/mypackage/MyMainFile.class

然后有一个 ant jar 任务来打包这个:

<target name="jar" depends="compile">
    <jar destfile="target/MyJarFile.jar" basedir="target/classes">
        <manifest>
            <attribute name="Main-Class" value="mypackage.MyMainFile"/>
        </manifest>
    </jar>
</target>

说完之后ant compile jar你应该在目标中有一个文件 MyJarFile.jar 并且

java -jar MyJarFile.jar

应该运行 main 方法。

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

JAR 文件的正确内部结构是什么 的相关文章

随机推荐

  • POST 到 ServiceStack 服务并检索 Location 标头

    我正在尝试 POST 到我的 ServiceStack 服务并从我创建的实体的响应中检索 Location 标头 我不确定使用 IReturn 是否有效 但我不确定如何从客户端访问响应标头 有人可以帮助我了解如何正确与 HttpResult
  • 使用 Python/ElementTree 在 XML 中插入元素的节点

    当值小于 5 时 我需要遍历 XML 树来添加子元素 例如 可以将此 XML 修改为 a value b value b a
  • 类库可以有 App.config 文件吗?

    这是我目前的解决方案 在 Tutomentor Branding 项目中 我想在 App config 文件中保存品牌信息 例如名称 颜色等 在 Tutomentor Data 项目中 App config 是在我添加实体 edmx 模型文
  • 使用clang生成llvm ir时如何保存变量名?

    我使用 clang S emit llvm test c 生成 ir int main int argc char argv int a 0 a int malloc sizeof int printf hello world n retu
  • 保留属性顺序的 Java XML 库

    我正在编写一个 Java 程序 它读取 XML 文件 进行一些修改 然后写回 XML 使用标准 Java XML DOM API 不会保留属性的顺序 也就是说 如果我有一个输入文件 例如
  • ASP .Net 实体框架 .tt 文件未嵌套在 .edmx 下

    我正在 VS 2012 Update 2 下运行 ASP NET v4 5 网站项目 当我在 App Code 文件夹下创建新的实体模型 edmx 时 嵌套在 edmx 文件下的只有 Designer cs 和 edmx diagram 文
  • Typescript:交叉点 - 对命名感到困惑

    我对这个名字有点困惑交叉口类型在打字稿中 在集合论中 交集意味着只有两种类型共有的属性在两者的交集中才可用 事实上 如果我在基元之间创建交集 这就是 Typescript 的行为方式 type A string number type B
  • 为什么Angular的DI内联注释中的函数是数组元素?

    我有一个问题想问 AngularJS 的人 所以 我现在使用 Angular 已经有一段时间了 然而 每次当我编写新的控制器或使用依赖注入的东西时 我发现自己写错了内联定义 someModule controller MyControlle
  • 无法在 POSTMan 上获取 Google oAuth 2 令牌

    嗯 自从其他问题 已解决 仍未解决 我正在考虑使用 POSTMan 对客户端库将执行的每个步骤进行试验和错误 所以我读了基本步骤再次使用 Google OAuth2 创建了另一个 OAuth 2 IDApi 管理器 gt 凭证在Dev Co
  • 您会推荐哪些 WPF 书籍? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • Django MultiWidget 电话号码字段

    我想创建一个电话号码输入字段 其中有 2 个文本字段 大小分别为 3 3 和 4 并带有常见的 分隔符 下面是我的字段和小部件的代码 在初始渲染期间尝试迭代表单中的字段时出现以下错误 当 for 循环到达我的电话号码字段时会发生这种情况 渲
  • 如何在不使用谷歌地图方向 API 的情况下查找 Android 应用程序中 2 个地理点之间的距离(通过道路)?

    我正在开发一个 Android 应用程序 我需要找到两个地理坐标之间的距离 I used Location distanceBetween and Location distanceTo 功能 这些函数给出的是直线距离 但当我们通过公路旅行
  • 如果db文件不存在,如何使sqlite3.connect()失败?

    sqlite3 connect 如果 db 文件不存在 将创建它 我希望它失败 有办法这样做吗 第一种方法是检查文件路径os path isfile import sqlite3 import os my path database db
  • 使用 ODR 拟合数据中的上限和不对称误差的 Python 幂律

    我正在尝试使用 python 将一些数据拟合到幂律中 问题是我的一些点是上限 我不知道如何将其包含在拟合程序中 在数据中 我将上限设置为 y 的误差等于 1 而其余的要小得多 您可以将此错误设置为 0 并更改 uplims 列表生成器 但拟
  • 强制 MapKit 仅使用缓存的地图图块/以编程方式禁用网络

    我们偶然发现了这样一个问题 我们正在开发一款旅行应用程序 为了确保用户不会在我们的应用程序中花费太多漫游费 我们决定实现一个设置选项 供用户仅查看缓存的地图 因此 我们让用户决定是否要从互联网加载地图 或者想要省钱并查看缓存的地图 存储在
  • InternetExplorer.Application 对象和 cookie 容器

    我有以下用 VB NET 编写的控制台应用程序 Sub Main Dim ie As Object CreateObject InternetExplorer Application ie Visible True ie Navigate2
  • Webform 中的 HTML 助手?

    我有一个旧网站 我想使用 HTML 助手之类的东西来生成特殊的 HTML 在本例中为复杂的按钮 我知道这在 ASP NET MVC 中是如何工作的 但我如何在 Webform 而不是 Razor 中做到这一点 我读过有关静态方法的建议 如下
  • 表单提交失败后显示服务器端验证错误

    表单提交失败后如何显示验证消息 API 请求返回 HTTP 400 application problem json 响应 并包含违规行为作为带有字段路径的列表 https www rfc editor org rfc rfc7807 se
  • 在Java中处理文件指针的有效方法? (使用 BufferedReader 和文件指针)

    我有一个每秒更新的日志文件 我需要定期读取日志文件 一旦执行读取 我需要将文件指针位置存储在我读取的最后一行的末尾 并且在下一个定期读取中我应该从该点开始 目前 我正在 Java 中使用随机访问文件并使用getFilePointer 方法来
  • JAR 文件的正确内部结构是什么

    这是一个非常愚蠢的问题 我找不到明确的答案 背景 我正在使用 Eclipse 在 XP 终端上使用 ANT 插件之一 我刚刚开始使用 ANT 在 jar 指令中 我正在设置已完成的 JAR 文件的位置 当我 解压缩 该文件时 我得到以下内容