首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:设置Classpath

Java:设置Classpath
EN

Stack Overflow用户
提问于 2012-04-23 05:38:42
回答 3查看 2.6K关注 0票数 1

我很快就会有一个项目,所有的东西都会很好地结合在一起,但是java类路径正在严重地阻碍着我。我将尽我所能解释清楚和彻底的情况。

因此,我们使用Javacc编写编程语言。javacc文件编译成几个java文件。Parser.java文件包括对其他生成的java文件的引用和调用。因此,生成后,我们编译Parser.java文件。问题是我们得到了许多错误,包括无法识别对其他java文件以及我们自己的文件的调用。我们在一个课堂讨论板上询问了我们的问题,教授回答说:“你需要在你的类路径中有课堂文件”。好的,很好,那么问题是,我们如何做到这一点呢?基本上只有一个目录,其中包含生成的java文件和其他助手文件。

,所以,我们试过什么?

我尝试过更改我的.bashrc (Ubuntu)文件,以包含正确的类路径,但这是行不通的。即

代码语言:javascript
复制
 CLASSPATH=Home/project

(就像这样,我的语法就在文件中)

我试过编译执行

代码语言:javascript
复制
javac -cp . Parser.java

代码语言:javascript
复制
javac -cp "." Parser.java

这两样都不管用。

我尝试在我们的文件目录中编辑xml (我认为是xml) .classpath文件。还是不起作用。

不知何故,我能够在我所拥有的目录中编译Parser.java (我们最终在其中创建了多个具有相同文件的目录,这样做是徒劳无功的),但是当我尝试运行时。

代码语言:javascript
复制
java -cp . Parser.java

代码语言:javascript
复制
java Parser.java

它说它找不到主文件并抛出(我相信,它在我的另一台计算机上) ClassNotFound或ClassNotDefined异常(类似的东西,它在Parser文件中找不到主文件,尽管它在那里)。

我们已经尝试将包减速和导入语句添加到我们的文件中,似乎没有什么工作。

基本上:如何成功地更改Classpath,以便编译并在我的机器上运行我的java文件(全部位于一个目录,而不是jarred)?

谢谢你的帮助。我非常感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-23 05:54:33

我强烈建议你调查一下蚂蚁。一个简单的构建文件可以为您解决所有这些问题。

您不需要编辑您的.bashrcCLASSPATH

在命令行中,您需要一起构建所有的java文件。我不确定在生成JavaCC和Parser之后,它是否需要javacc.jar。但是让我们假设它是为了一些通用的AST支持而做的。

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

场景1:简单的目录结构,所有Java文件都在根文件夹中,没有包。

代码语言:javascript
复制
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:中型目录结构,在根目录中编码,但使用包。

代码语言:javascript
复制
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:复杂的目录结构,带有包的特定源目录。

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2012-04-23 05:59:32

javacjava是有区别的。你试图错误地使用它们。javac是一个编译器,它生成*.class文件(在您的例子中是Parser.class)。然后,*.class文件必须由java运行。

所以如果我有文件Parser.java

代码语言:javascript
复制
class Parser {

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

}

我将访问该文件所在的目录并在shell中运行:

代码语言:javascript
复制
javac Parser.java

而不是运行编译的文件。

代码语言:javascript
复制
java Parser

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

票数 0
EN

Stack Overflow用户

发布于 2012-04-23 05:43:28

  1. 创建所有已编译类的Jar文件。关于如何创建jar文件,请参阅此教程
  2. 使用以下命令启动程序 java -classpath pathToJarFile com.abc.MainClass
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10275326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档