這篇文章起源于程序員之家論壇(http://www.sunxin.org)上的一個(gè)網(wǎng)友的提問(wèn),我對(duì)他的問(wèn)題做了回答。具體網(wǎng)址:http://www.sunxin.org/bbs/dispbbs.asp?boardID=6&ID=12289&page=1
我感覺(jué)這個(gè)問(wèn)題的答案對(duì)Java的初學(xué)者來(lái)說(shuō),會(huì)有一定的幫助,所以將問(wèn)題和答案整理成文。
問(wèn)題
首先新建一個(gè)目錄存放Java源文件,或者直接在某個(gè)盤符下放置程序,例如:D:",然后按照下面的步驟進(jìn)行實(shí)驗(yàn)(本實(shí)驗(yàn)在D:"目錄下操作)。
Step1:編寫程序World.java,代碼如下:
package a;
public class World
{
public World()
{
System.out.println(", World!");
}
}
import a.World;
public class Hello
{
public static void main(String[] args)
{
System.out.print("Hello");
World world = new World();
}
Step3:將兩個(gè)程序保存到你所建的目錄下,在這里,我們將它們保存到D:"下。
Step4:編譯這兩個(gè)Java源文件
先編譯World.java,執(zhí)行javac -d . World.java,在D盤生成目錄a,及其中的World.class。接下來(lái)編譯Hello.java,執(zhí)行javac Hello.java,在D盤上生成Hello.class。
Step5:運(yùn)行Hello類
執(zhí)行java Hello,輸出Hello, World!目前一切正常。
Step6:修改Hello.java
將第1行的語(yǔ)句“import a.World;”改為“import a.*;”,重新編譯Hello.java,出現(xiàn)下面的錯(cuò)誤提示:
錯(cuò)誤的類文件: ."World.java
文件不包含類 World
請(qǐng)刪除該文件或確保該文件位于正確的類路徑子目錄中。
World world = new World();
Step7:根據(jù)錯(cuò)誤提示進(jìn)行下列操作
按照錯(cuò)誤提示,刪除 World.java 或者將 World.java 放到其他地方,則程序成功編譯運(yùn)行。
問(wèn)題:
請(qǐng)問(wèn)為何會(huì)出現(xiàn)Step6中的錯(cuò)誤呢?使用 “import a.*;”導(dǎo)入a下所有類和接口,和使用“import a.World;”導(dǎo)入a包中具體的類,為何會(huì)產(chǎn)生上述的差異呢?
回答
當(dāng)你導(dǎo)入一個(gè)包中所有的類時(shí),javac在編譯時(shí)并不確定你要使用的World類是a包中的類,還是其他包中的類,它會(huì)根據(jù)你機(jī)器上的CLASSPATH環(huán)境變量的值去查找類,通常我們?cè)?/span>CLASSPATH中會(huì)設(shè)置一個(gè)點(diǎn)(.),表示當(dāng)前目錄,如果沒(méi)有CLASSPATH環(huán)境變量,那么在JDK1.4之后,默認(rèn)也是查找當(dāng)前目錄。javac在按照文件名(不包括后綴)來(lái)查找類,于是找到World.java,而這個(gè)文件根本不是字節(jié)碼文件,當(dāng)然就報(bào)錯(cuò)了。當(dāng)你導(dǎo)入一個(gè)具體的類時(shí),javac在分析源文件時(shí)就知道了你程序中用的類是a.World,那么它就在CLASSPATH環(huán)境變量下查找a目錄下的World類,正好有,于是正確執(zhí)行。
為了幫助讀者對(duì)這個(gè)問(wèn)題加深理解,我給大家設(shè)計(jì)了下面的操作步驟(本文是在D盤上操作):
(1)將a目錄剪切到C:"下;
(2)再次執(zhí)行javac Hello.java,你會(huì)看到同樣的錯(cuò)誤。也就是證實(shí)了在出錯(cuò)之前,javac還沒(méi)有去查找a包中的類(對(duì)于包是否存在的驗(yàn)證已經(jīng)進(jìn)行)。
(3)執(zhí)行set classpath=c:"。由于你明確地設(shè)置了CLASSPATH環(huán)境變量的值,并且沒(méi)有包含點(diǎn)(.),因此javac不會(huì)再查找當(dāng)前的目錄。
(4)再次執(zhí)行javac Hello.java,你會(huì)發(fā)現(xiàn)成功執(zhí)行。
這里面還有一個(gè)有趣的現(xiàn)象,如果我們將a目錄下的World.class刪除,替換為World.java,那么在編譯Hello.java時(shí),World也會(huì)被自動(dòng)編譯。
Funambol DM 安裝過(guò)程
Funambol安裝過(guò)程包括了Java環(huán)境安裝,Mysql安裝,Jboss安裝和Funambol DM的安裝.一: Java環(huán)境安裝
1: Java現(xiàn)在使用的版本是:jdk-1_5_0-windows-i586.exe.
2: 安裝完畢,請(qǐng)?jiān)?/span>windows系統(tǒng)下設(shè)置環(huán)境變量JAVA_HOME={jdk的安裝目錄}
如: JAVA_HOME=C:"Java"jdk1.5.0
二: Mysql安裝
1: Mysal使用的版本是: mysql-5.0.22-win32.zip
2: 安裝完畢,要進(jìn)行數(shù)據(jù)庫(kù)的創(chuàng)建
3: 在MySQL 中創(chuàng)建funambol Database
運(yùn)行如下命令為DM Server創(chuàng)建Database和相關(guān)的授權(quán)用戶funambol
mysql > create database funambol_db;
mysql > grant all on funambol_db.* to 'funambol'@'localhost' identified by 'funambol';
4: 檢查創(chuàng)建的MySQL funambol 用戶權(quán)限
運(yùn)行如下命令檢查在MySQL中創(chuàng)建的用戶funambol是否對(duì)funambol _db數(shù)據(jù)庫(kù)具備訪問(wèn)權(quán)限:
> mysql -u funambol
mysql > use funambol_db;
Database changed
5: 安裝創(chuàng)建完成,可以到Mysql的data目錄查看目前創(chuàng)建的數(shù)據(jù)庫(kù)是否存在.
三: Jboss安裝
1: Jboss使用版本為:jboss-4.2.1.GA。
下載地址:
http://sourceforge.net/project/showfiles.php?group_id=22866&package_id=16942&release_id=523619
2: 在如上的下載頁(yè)中下載JBoss-4.2.1.GA.zip文件。
下載完成后,將其解壓縮后即可完成安裝,解壓縮后將其放置到一個(gè)不帶空格的目錄(若目錄帶有空格,例如:C:"Program Files,日后可能會(huì)產(chǎn)生一些莫名的錯(cuò)誤),eg:c:"jboss4.2.1。同時(shí)在“環(huán)境變量設(shè)置”中設(shè)置名為JBOSS_HOME的環(huán)境變量,值為JBoss的安裝路徑,如:
JBOSS_HOME= c:"jboss4.2.1
J2EE_HOME= c:"jboss4.2.1
3: 拷貝mysql的驅(qū)動(dòng)到jboss目錄下,
將mysql的jdbc驅(qū)動(dòng)文件mysql-connector-java-3.1.12-bin.jar拷貝到c:" JBoss4.2.1"
MySQLJDBC下(如果沒(méi)有請(qǐng)自行創(chuàng)建),并在“環(huán)境變量設(shè)置”設(shè)置
JBOSS_CLASSPATH=c:" JBoss4.2.1"MySQLJDBC"mysql-connector-java-3.1.12-bin.jar
在此,JBoss的安裝工作已經(jīng)結(jié)束,
5: 修改run.bat文件
將:
rem Add -server to the JVM options, if supported
"%JAVA%" -version 2>&1 | findstr /I hotspot > nul
if not errorlevel == 1 (set JAVA_OPTS=%JAVA_OPTS% -server)
改為
rem Add -server to the JVM options, if supported
rem "%JAVA%" -version 2>&1 | findstr /I hotspot > nul
rem if not errorlevel == 1 (set JAVA_OPTS=%JAVA_OPTS% -server)
4: 測(cè)試安裝是否成功:
運(yùn)行JBoss安裝目錄"bin"run.bat,如果窗口中沒(méi)有出現(xiàn)異常,且出現(xiàn):10:16:19,765 INFO [Server] JBoss (MX MicroKernel) [4.2.1.GA (build: SVNTag=JBoss_4_2_1_GA date=200707131605)] Started in 30s:828ms字樣,則表示安裝成功。
5: 訪問(wèn)JBOSS
我們可以通過(guò)訪問(wèn):http://localhost:8080進(jìn)入JBoss的歡迎界面,點(diǎn)擊JBoss Management下的JMX Console可進(jìn)入JBoss的控制臺(tái)。
6: 若啟動(dòng)失敗,可能由以下原因引起:
1)JBoss所用的端口(8080,1099,1098,8083等)被占用。一般情況下為8080端口被占用(例如,Oracle占用了8080端口),此時(shí)需要修改JBoss的端口,方法為進(jìn)入JBoss安裝目錄"server"default"deploy"jboss-web.deployer目錄,修改其下的server.xml目錄,在此文件中搜索8080,將其改成你想要的端口即可(例如8088);
2)JDK安裝不正確;
3)JBoss下載不完全。
四: Funambol DM安裝
1: Funambol 使用的版本是: funambol-dm-server-3.5.2
下載地址:
http://www.funambol.com/opensource/downloads.html
2: 下載Sync4J DM Server后直接解壓縮即可。具體的地址可以是C:"funambol
3: 修改DM 的install.properties中的數(shù)據(jù)庫(kù)連接參數(shù)。
文件路徑為Sync4J DM Server的根目錄下,即install.properties。所需修改的內(nèi)容如下:
server-name=http://{your ip}:8080/funambol/dm
dbms=mysql
jdbc.classpath=C:/jboss-4.2.1/MySQLJDBC/mysql-connector-java-3.1.12-bin.jar
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1/funambol_db?zeroDateTimeBehavior=round
jdbc.user=funambol
jdbc.password=funambol
注意:
A: 如果使用MySQL,并且MySQL Server與sync4j DM Server在同一臺(tái)機(jī)器上,使用127.0.0.1進(jìn)行連接時(shí),缺省情況下可以不設(shè)置口令。
B: server-name中提供的URL必須填寫當(dāng)前安裝的DM Server的Internet合法IP地址,否則手機(jī)終端設(shè)備無(wú)法發(fā)起連接,無(wú)法完成DM配置信息的同步。
C:使用MySQL時(shí)必須設(shè)定jdbc.url的參數(shù)zeroDateTimeBehavior=round,否則在運(yùn)行DM時(shí)將出現(xiàn)如下錯(cuò)誤信息:
Error Executing Database Query.
Value '0000-00-00' can not be represented as java.sql.Timestamp
詳細(xì)原因參見(jiàn):http://dev.mysql.com/doc/refman/5.0/en/cj-upgrading.html
4: 修改DM Server的default"config"common"properties" Funambol.properties中的參數(shù), 內(nèi)容如下:
server.uri=http://{your ip}:8080/funambol/dm
注: server.uri中提供的URL必須填寫當(dāng)前安裝的DM Server的Internet合法IP地址,否則手機(jī)終端設(shè)備無(wú)法發(fā)起連接,無(wú)法完成DM配置信息的同步。
5: 運(yùn)行Sync4j DM Server安裝腳本
> cd funambol
> bin"install.cmd jboss32
BUILD SUCCESSFUL
Total time: 12 seconds
6: 檢查MySQL中數(shù)據(jù)庫(kù)表的創(chuàng)建情況
前面的安裝步驟結(jié)束后將在MySQL Server的funambol_db中創(chuàng)建相關(guān)的表,本步驟對(duì)其進(jìn)行檢查。方法如下:
> mysql -u funambol
mysql > use funambol_db;
mysql > show tables;
+----------------------------------------+
| Tables_in_sync4jdm_db |
+----------------------------------------+
| fnbl_device |
| fnbl_dm_state |
| fnbl_id |
| fnbl_principal |
| fnbl_role |
| fnbl_treediscovery_processor |
| fnbl_user |
| fnbl_user_dm_demo |
| fnbl_user_role |
+----------------------------------------+
9 rows in set (0.00 sec)
7: 啟動(dòng)Sync4j DM Server
當(dāng)安裝成功后,系統(tǒng)會(huì)自動(dòng)在bin目錄下生成start.cmd/sh文件.
> cd funambol
> bin"start.cmd
注意: 所有的字符都是大小寫敏感,所以上面紅色字體一定按照實(shí)際情況的大小寫進(jìn)行組織.