我在当前目录中有几个java源文件,我想生成一个jar文件并在我的类路径中使用它。所以我获取了所有源文件并编译它们以生成相关的.class文件。我创建了jar文件,如下所示:
jar cf abstractions.jar *.class
这当然产生了jar文件abstractions.jar
然后我创建了以下名为Main.java
import edu.stanford.cs.console.ConsoleWindow;
public class Main {
public static void main(String[] args) {
ConsoleWindow console = new ConsoleWindow();
}
}
我从命令行编译了这个文件,如下所示:
javac -cp abstractions.jar Main.java
我收到以下错误消息,指出无法找到包:
Main.java:1:错误:包edu.stanford.cs不存在导入 edu.stanford.cs.ConsoleWindow;
^ Main.java:5:错误:无法访问ConsoleWindow ConsoleWindow console = new ConsoleWindow(); ^坏类文件:./ abstract.jar(ConsoleWindow.class) 类文件包含错误的类:edu.stanford.cs.console.ConsoleWindow 请删除或确保它出现在类路径的正确子目录中。
以下是ConsoleWindow类的顶部:
/*
* File: ConsoleWindow.java
* ------------------------
* This file implements the Console interface using a JFrame window.
*/
package edu.stanford.cs.console;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
我不明白错误信息。它提到了一个关于子目录的东西,但我在jar里面没有任何文件夹。
如何解决问题并让我的程序编译?
答案 0 :(得分:0)
您的jar命令应该包含.class文件所在的文件夹。 生成的.jar文件是否包含文件?将.jar重命名为.zip并查看内部。
您应该使用ant来构建jar文件,如下所示:
<target name="jar" description="build jar file">
<jar destfile="abstractions.jar" includes="**/*.class" basedir="folder_where_you_put_class_files">
</jar>
</target>
然后你会得到一个合适的jar文件。
或者使用jar移动到.class文件所在的基本文件夹中并使用:
jar -cf ../abstractions.jar *
使用* .class只会压缩当前文件夹中的文件(不是递归的)
注意jar的帮助:
“如果任何文件是目录,则以递归方式处理。”