繁体   English   中英

Java:设置类路径

[英]Java: Setting Classpath

我有一个即将到期的项目,而且一切都进展顺利,但是java类路径正在变得越来越严重。 我将尽我所能尽可能清楚地解释这种情况。

因此,我们使用Javacc编写一种编程语言。 javacc文件编译成几个java文件。 Parser.java文件包括对其他生成的Java文件的引用和调用。 因此,生成后,我们将编译Parser.java文件。 问题是我们遇到了很多错误,包括无法识别对其他java文件以及我们自己的文件的调用。 我们在教室讨论板上询问了我们的问题,然后教授回答“您需要在课程路径中包含课程文件”。 好的,很好,问题是,我们该怎么做? 基本上,我们只有一个目录,其中包含生成的Java文件和其他帮助文件。

那么,我们尝试了什么?

我尝试更改.bashrc(Ubuntu)文件以包括正确的类路径,但这不起作用。

 CLASSPATH=Home/project

(就像我在文件中使用的语法一样)

我试过编译执行

javac -cp . Parser.java

javac -cp "." Parser.java

都不起作用。

我试图在文件目录中编辑xml(我认为是xml).classpath文件。 仍然不起作用。

不知何故,我能够在我拥有的目录之一中编译Parser.java(我们最终创建了多个目录,其中包含相同的文件,这是徒劳的努力,以使某些工作正常进行),但是当我尝试运行时

java -cp . Parser.java

要么

java Parser.java

它说找不到主程序,并抛出(我相信,在我的另一台计算机上)它的ClassNotFound或ClassNotDefined异常(类似的东西,即使它存在,它也无法在Parser文件中找到主程序)。

我们尝试将软件包减速和导入语句添加到我们的文件中,似乎没有任何效果。

基本上:如何才能成功更改类路径,以便可以在我的计算机上编译并运行我的java文件(全部位于一个目录中,而不是受jared影响)?

谢谢您的帮助。 我非常感谢。

我强烈建议您研究Ant 一个简单的构建文件可以为您解决所有这些问题。

您不需要编辑.bashrcCLASSPATH

从命令行,您需要一起构建所有Java文件。 我不确定在生成javacc.jar和Parser后JavaCC是否需要javacc.jar 但让我们假设它确实对某些通用AST支持有效。

javacc.jar位于~/javacc-5.0/lib/javacc.jar

方案1:目录结构简单,所有Java文件都位于根目录中,没有包。

root
  | Parser.java
  | Lexer.java
  | Program.java

要编译这些文件,我需要运行:

javac -cp ~/javacc-5.0/lib/javacc.jar Parser.java Lexer.java Program.java

那么我可以像这样执行Program ,如果程序具有main

java -cp ~/javacc-5.0/lib/javacc.jar:. Program

场景2:中等目录结构,代码在根目录下,但带有软件包。

root
  | org
     | myproject
          | Parser.java
          | Lexer.java
          | Program.java

那么您需要像这样执行javac:

javac -cp ~/javacc-5.0/lib/javacc.jar org/myproject/Parser.java org/myproject/Lexer.java org/myproject/Program.java

并执行

java -cp ~/javacc-5.0/lib/javacc.jar:. org.myproject.Program

方案3:复杂的目录结构,带有包的特定源目录。

root
   | src
      | org
          | myproject
              | Parser.java
              | Lexer.java
              | Program.java

那么您需要像这样执行javac:

javac -cp ~/javacc-5.0/lib/javacc.jar -sourcepath src src/org/myproject/Parser.java src/org/myproject/Lexer.java src/org/myproject/Program.java

并执行

java -cp ~/javacc-5.0/lib/javacc.jar:src org.myproject.Program

javacjava之间有区别。 您尝试以错误的方式使用它们。 javac是一个生成* .class文件的编译器(在您的情况下为Parser.class)。 然后必须由java运行此* .class文件。

所以如果我有Parser.java文件

class Parser {

  public static void main(String[] args) {
    System.out.println("Hi");
  }

}

我将转到此文件所在的目录并在shell中运行:

javac Parser.java

比运行编译文件

java Parser

就是这样。 请注意,java文件中类的名称必须与文件名相同。

  1. 创建所有已编译类的Jar文件。 请参考本教程 ,了解如何创建jar文件。

  2. 使用此命令开始编程

      java -classpath pathToJarFile com.abc.MainClass 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM