如何在Java中导入JAR和包

时间:2010-09-08 12:02:48

标签: java jar package

我对Java比较陌生。我一直在使用Eclipse做一些工作,但我想回到基础,只需将文本编辑器与JDK结合使用。我现在面临的问题是Eclipse和其他IDE隐藏了很多基本的东西,这些东西对于了解和完全理解是非常重要的。这就是我想要做的事情:

  • 我创建了一个名为“C:\ Java Projects”的目录,在该目录下我创建了3个子文件夹,Project1,Project2和SharedJars。 Project1和Project2都有SubDirs,如类和源。 Poject1源.java文件位于“c:\ Java Projects \ Project1 \ source \ com \ myApp”

  • Project1和Project2都是使用Log4J JAR的包,它们位于SharedJars文件夹中。在Eclipse世界中,我可以设置一些东西告诉Eclipse我的项目将使用哪些JAR,然后执行类似导入org.apache.log4j.Logger的工作正常。但是我很难让这个工作。

  • 我已将CLASSPATH环境变量设置为“C:\ Java Projects \ SharedJars \ log4j-1.2.15.jar”

  • 然后我执行以下操作:

    cd Project1 \ source
    javac -d .. \ classes com \ myApp \ *

  • 这会产生一大堆相关错误,例如

选择了_JAVA_OPTIONS:-Duser.home =“C:\ Java Projects”
com \ myApp \ Monitor.java:11:找不到符号
符号:类记录器
位置:com.myApp.Monitor类         private static Logger LOG;

一些问题: 1)我还需要导入org.apache.log4j.Logger吗? 2)如果是这样,什么决定了包的FQDN? 3)我是否需要在特定目录中才能运行javac?目前我要进入Project1的源目录(java / bin已经在我的PATH中)

对不起这些愚蠢的问题。我已经浏览了很多网站,但很多都没有涵盖这些基础知识。我希望这是有道理的。

RGDS 约翰

3 个答案:

答案 0 :(得分:4)

欢迎来到SO。

回答这个问题:

  

我还需要导入org.apache.log4j.Logger吗?

是的,您始终需要使用任何要使用的类的import指令。除非你告诉它,否则Java不会加载任何东西,即使它在类路径上。

  

如果是,那么什么决定了包的FQDN?

在jar中,.class文件位于子目录中,如下所示:org/apache/log4j ...等。这是FQDN的确定方式,它基本上用作命名空间构造,因此你可以有两个或更多类相同的名称 - 这也是Java无法在类路径上加载所有内容的原因。如果确实如此,那就无法消除歧义并找出你想要的课程。

  

我是否需要在特定目录中才能运行javac

没有。你可以从任何地方运行它,只要你有类路径,就可以访问你的依赖项。如果在命令行中指定,则它可以是相对类路径,如果在环境变量中,则可以是绝对路径。同样,您不需要在特定目录中使用java,但您确实需要它才能到达正确的位置。

答案 1 :(得分:1)

  
    

1)我还需要导入org.apache.log4j.Logger吗?

  

是的,这应该可以解决您问题中的错误,因为您的CLASSPATH是正确的。

  
    

2)如果是,那么什么决定了包的FQDN?

  

import不会更改包的FQDN。它只允许您在该文件中将org.apache.log4j.Logger简称为Logger

  
    

3)我是否需要进入特定目录才能运行javac?

  

不,但如果当前目录是您正在编译的项目的source目录(如果不是,您可以使用-sourcepath选项解决它javac,这是最简单的}。)

至于运行程序,您可能需要创建Project1.jar并使用清单告诉它在哪里找log4j.jar,但那是a separate question

答案 2 :(得分:0)

我发布我的解决方案,因为以上解决方案都不适合我。它在Windows XP / 7下适用于我。

  1. 从log4j网站[1]下载zip或tar软件包到您的计算机&解压缩下载的文件。
  2. 将文件log4j-VERSION.jar复制到LOG4J_ISTALLATION_DIR(例如c:\ javalibs \ log4j-1.2.16.jar)
  3. 打开“我的电脑/电脑”的属性(图标应放在桌面上,只需点击鼠标右键,然后选择属性)
  4. 打开标签“高级系统设置”。
  5. 打开标签“高级”
  6. 点击“环境变量”按钮。
  7. 在“环境变量”区域中找到变量CLASSPATH,将其与左键匹配并单击“编辑”按钮。
  8. 粘贴/键入log4j库的路径 - LOG4J_ISTALLATION_DIR \ log4j-VERSION.jar; (例如c:\ javalibs \ log4j-1.2.16.jar;)
  9. 点击“确定”按钮。
  10. 点击“环境变量”窗口中的“确定”按钮。
  11. 点击“系统属性”窗口中的“确定”按钮。
  12. 转到命令行并通过log4j简短教程(下面的attachede)中的示例检查一切是否正常工作:

      

    cd c:\ Users \ User \ log4j
      javac MyApp2.java
      2012-03-30 21:32 510 Bar.class
      2012-03-30 21:24 177 Bar.java
      2012-03-30 21:26 334 MyApp2-log4j.properties
      2012-03-30 21:32 916 MyApp2.class
      2012-03-30 21:25 775 MyApp2.java
      java MyApp2 MyApp2-log4j.properties
      0 [主要] INFO MyApp2 - 输入申请
      2 [主要] DEBUG酒吧 - 再次确认了   3 [主要] INFO MyApp2 - 退出申请

  13. 背景:准备使用某些* jar文件的程序[1](问题来源):

    // 1.转到您的源目录(例如c:\ Users \ Hopbit \ log4j)

    // 2.在Bar类下创建并保存为Bar.java

    import org.apache.log4j.Logger;
    
    public class Bar {
      static Logger logger = Logger.getLogger(Bar.class);
      public void doIt() {
        logger.debug("Did it again!");
      }
    }
    

    // 3.在MyApp2类下面创建并保存为MyApp2.java

    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
    
    public class MyApp2 {
    
      static Logger logger = Logger.getLogger(MyApp.class.getName());
    
      public static void main(String[] args) {
    
        // BasicConfigurator replaced with PropertyConfigurator.
        PropertyConfigurator.configure(args[0]);
    
        logger.info("Entering application.");
        Bar bar = new Bar();
        bar.doIt();
        logger.info("Exiting application.");
      }
    }
    

    // 4.创建&保存MyApp2-log4j.properties文件,其中包含以下代码:

    # Set root logger level to DEBUG and its only appender to A1.
    log4j.rootLogger=DEBUG, A1
    
    # A1 is set to be a ConsoleAppender.
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    
    # A1 uses PatternLayout.
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
    

    // 5.尝试编译上面的例子,它应该返回如下内容:

    > c:\Users\Hopbit\log4j>javac MyApp2.java
    > MyApp2.java:1: package org.apache.log4j does not exist
    > import org.apache.log4j.Logger;
    >                         ^
    > // [...] SOME OTHER ERRORS HERE
    

    LINKS& HINTS

    [1] http://logging.apache.org/log4j/1.2/manual.html(“log4j简介:CekiGŁlcŁ,2002年3月”)
    [2] http://logging.apache.org/log4j/1.2/download.html
    [3]上面的解决方案是在文件INSTALL中创建的,它放在uder log4j包中。