我很快就会有一个项目,所有的东西都会很好地结合在一起,但是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文件中找不到主文件,尽管它在那里)。
我们已经尝试将包减速和导入语句添加到我们的文件中,似乎没有什么工作。
基本上:如何成功地更改Classpath,以便编译并在我的机器上运行我的java文件(全部位于一个目录,而不是jarred)?
谢谢你的帮助。我非常感激。
发布于 2012-04-23 05:54:33
我强烈建议你调查一下蚂蚁。一个简单的构建文件可以为您解决所有这些问题。
您不需要编辑您的.bashrc或CLASSPATH。
在命令行中,您需要一起构建所有的java文件。我不确定在生成JavaCC和Parser之后,它是否需要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
发布于 2012-04-23 05:59:32
javac和java是有区别的。你试图错误地使用它们。javac是一个编译器,它生成*.class文件(在您的例子中是Parser.class)。然后,*.class文件必须由java运行。
所以如果我有文件Parser.java
class Parser {
public static void main(String[] args) {
System.out.println("Hi");
}
}我将访问该文件所在的目录并在shell中运行:
javac Parser.java而不是运行编译的文件。
java Parser就是这样。注意,java文件中的类的名称必须与文件的名称相同。
发布于 2012-04-23 05:43:28
https://stackoverflow.com/questions/10275326
复制相似问题