使用生成的jar文件中的classpath编译Java源文件

时间:2017-07-12 15:49:31

标签: java jar classpath

我在当前目录中有几个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里面没有任何文件夹。

如何解决问题并让我的程序编译?

1 个答案:

答案 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的帮助:

“如果任何文件是目录,则以递归方式处理。”