有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使ANTLR生成的类文件成为一个jar文件

使用ANTLR,我在编译后得到一些java类文件。 我需要把所有的类文件放到一个jar文件中

我表明。mf文件,其中有一行“Main class:Test”指示主文件。 我运行“JARCMF清单”。你好。jar*。同学们打招呼。jar文件

但是当我试着运行“java-jarhello”时。jar',我得到以下错误消息

^{pr1}$

怎么了? 当我运行“java测试”时,我得到了正确的结果

我使用的示例是《最终的ANTLR参考》一书中的源代码,您可以从http://www.pragprog.com/titles/tpantlr/source_code下载

示例位于/tour/trees/。在编译了g和java文件之后,我得到了一堆类文件

使用unzip-l,我得到以下信息

^{pr2}$

测试。java的开头如下

import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
public class Test {
    public static void main(String[] args) throws Exception {

共 (1) 个答案

  1. # 1 楼答案

    您用于测试类的包名称空间是什么

    比如说,如果你的主课是职业选手。寻找测验 你把它列为

    Main-class: pro.seek.Test
    

    ?

    Antler会产生文件夹的层次结构

    whatever/pro/seek
    

    因此,您的主类文件位于

    whatever/pro/seek/Test.java
    

    当您jared文件时,您是否首先将cd放入“whatever”文件夹,以便在创建jar时将jar内容根放到“pro”文件夹中?因此,当您使用zip查看器列出jar文件时,您可以看到/pro/seek/层次结构,在该层次结构下可以找到生成的java源文件

    您是否正确创建了jar文件?可能不是antlr问题,而是关于如何创建可执行jar的问题

    从您提供的更多信息中,

    以下是进一步的想法:

    在运行hello时,您没有包括antlr分发jar的路径。罐子

    或者在清单中指定它为

    Class-Path: antlr-3.1.1-runtime.jar
    

    或者在运行hello时指定它。罐作为

    jar hello.jar -classpath antlr-3.1.1-runtime.jar
    

    确保antlr罐子在hello旁边。罐子

    当java源代码在编译期间使用任何库时,在运行编译后的代码时必须包含这些库,这应该是非常明显的规则,因为计算机需要知道如何处理对库例程的调用

    比如说,有人在一个类Truth中编写了一个例程showMe(boolean theTruth),并将其放在一个jar Truth中。罐子:

    public class Truth{
      static public void showMe(boolean theTruth){
        if (theTruth)
           println("It's a lie");
        else
           println("Thanks for the truth");
      }
    }
    

    还有你的测试。java有一个电话

    Truth.showMe(false);
    

    你必须包括真相。否则jvm如何知道如何处理对showMe()的调用

    Antlr生成一组java源文件,它们调用Antlr运行时,因此需要在运行时类路径中包含Antlr运行时。您的运行时错误表明jvm正在查找org。antlr。运行时。在Antl运行时jar中找到的CharStream类

    http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html