[英]How do I import JARs and Packages in Java
我對Java比較陌生。 我一直在使用Eclipse做一些工作,但是我想回到基礎知識,而只是將文本編輯器與JDK結合使用。 我現在遇到的問題是Eclipse和其他IDE隱藏了很多基本知識,這對於了解和完全理解非常重要。 這就是我想要做的:
我創建了一個名為“ C:\\ Java Projects”的目錄,在該目錄下,創建了3個子文件夾Project1,Project2和SharedJars。 Project1和Project2都有子類,如類和源。 Poject1源.java文件位於“ c:\\ Java Projects \\ Project1 \\ source \\ com \\ myApp”中
Project1和Project2都是使用Log4J JAR的程序包,該程序位於SharedJars文件夾中。 在Eclipse世界中,我可以設置一些內容來告訴Eclipse我的項目將使用哪些JAR,然后執行import 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類
私有靜態Logger LOG;
一些問題:1)我仍然需要導入org.apache.log4j.Logger嗎? 2)如果是這樣,什么決定了軟件包的FQDN? 3)運行Javac是否需要在特定目錄中? 目前,我正在進入Project1的源目錄(java / bin已經在我的PATH中)
對不起這些愚蠢的問題。 我已經瀏覽了太多的網站,但是很多網站都沒有介紹基本知識。 我希望這是有道理的。
羅格·約翰
歡迎來到SO。
為了回答這個問題:
我仍然需要導入org.apache.log4j.Logger嗎?
是的,您始終需要在要使用的任何類中使用導入指令。 除非您告知Java,否則Java不會加載任何東西,即使它在類路徑中也是如此。
如果是這樣,什么決定了軟件包的FQDN?
在jar內,.class文件位於以下子目錄中: org/apache/log4j ...
等。這是確定FQDN的方式,它基本上用作命名空間構造,因此您可以具有兩個或多個類同名-這也是Java無法在類路徑上加載所有內容的原因。 如果這樣做的話,將無法消除歧義並確定您想要哪個班級。
我需要在特定目錄中才能運行
javac
嗎?
否。您可以在任何位置(只要您可以從任何位置)訪問類依賴,就可以在任何位置運行它。 如果在命令行上指定,則可以是相對的類路徑;如果在環境變量中指定,則可以是絕對的類路徑。 同樣,您不需要在特定目錄下即可使用java
但您確實需要它才能到達正確的位置。
1)我仍然需要導入org.apache.log4j.Logger嗎?
是的,您這樣做了,這應該可以解決問題中的錯誤,因為CLASSPATH
是正確的。
2)如果是這樣,什么決定了軟件包的FQDN?
import
不會更改包的FQDN。 它僅允許您在該文件中簡單地將org.apache.log4j.Logger
引用為Logger
。
3)運行Javac是否需要在特定目錄中?
否,但是如果當前目錄是您正在編譯的項目的source
目錄,這是最簡單的(如果不是,則可以使用javac
的-sourcepath
選項解決該問題)。
對於運行該程序,您可能需要創建一個Project1.jar
並使用清單來告訴它在哪里可以找到log4j.jar
,但這是一個單獨的問題 。
我發布我的解決方案,因為上述解決方案都不適合我。 它適用於Windows XP / 7。
轉到命令行,並通過嘗試log4j簡短教程中的示例(如下所示)檢查一切是否正常:
cd c:\\ Users \\ User \\ log4j
javac MyApp2.java
2012-03-30 21:32 510酒吧
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 [main] INFO MyApp2-進入應用程序
2 [main]調試欄-再次執行
3 [main] INFO MyApp2-退出應用程序
// 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
[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]上面的解決方案位於放置在uder log4j軟件包中的文件INSTALL中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.