我有一个项目即将到期,一切都很好地融合在一起,但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
它说它无法找到main和throws(我相信,它在我的另一台计算机上)ClassNotFound或ClassNotDefined异常(类似的东西,它找不到Parser文件中的main,尽管它在那里)。
我们尝试将包减速和导入语句添加到我们的文件中,似乎没什么用。
基本上:如何成功更改Classpath,以便我的java文件(所有在一个目录中而不是jarred)可以在我的机器上编译和运行?
感谢您的帮助。我非常感激。
答案 0 :(得分:2)
我强烈建议你研究Ant。一个简单的构建文件可以为您解决所有这些问题。
您无需修改.bashrc
或CLASSPATH
。
从命令行,您需要一起构建所有java文件。在生成Lexer和Parser之后,我不确定JavaCC是否需要javacc.jar
。但是我们假设它适用于一些通用的AST支持。
javacc.jar
位于~/javacc-5.0/lib/javacc.jar
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
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
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
答案 1 :(得分:0)
javac
和java
之间存在差异。你试图以错误的方式使用它们。 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文件中类的名称必须与文件名相同。
答案 2 :(得分:-2)
创建所有已编译类的Jar文件。有关如何创建jar文件,请参阅此tutorial。
使用此命令开始编程
java -classpath pathToJarFile com.abc.MainClass