久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

java代碼編譯工程,java代碼編譯過程

什么是Java代碼的編譯與反編譯?

Java代碼的編譯與反編譯

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),順慶企業(yè)網(wǎng)站建設(shè),順慶品牌網(wǎng)站建設(shè),網(wǎng)站定制,順慶網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,順慶網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

2017-02-21Hollis數(shù)盟

一、什么是編譯

1、利用編譯程序從源語言編寫的源程序產(chǎn)生目標(biāo)程序的過程。

2、用編譯程序產(chǎn)生目標(biāo)程序的動(dòng)作。編譯就是把高級(jí)語言變成計(jì)算機(jī)可以識(shí)別的2進(jìn)制語言,計(jì)算機(jī)只認(rèn)識(shí)1和0,編譯程序把人們熟悉的語言換成2進(jìn)制的。編譯程序把一個(gè)源程序翻譯成目標(biāo)程序的工作過程分為五個(gè)階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優(yōu)化;目標(biāo)代碼生成。主要是進(jìn)行詞法分析和語法分析,又稱為源程序分析,分析過程中發(fā)現(xiàn)有語法錯(cuò)誤,給出提示信息。

二、什么是反編譯

計(jì)算機(jī)軟件反向工程(Reverseengineering)也稱為計(jì)算機(jī)軟件還原工程,是指通過對(duì)他人軟件的目標(biāo)程序(可執(zhí)行程序)進(jìn)行“逆向分析、研究”工作,以推導(dǎo)出他人的軟件產(chǎn)品所使用的思路、原理、結(jié)構(gòu)、算法、處理過程、運(yùn)行方法等設(shè)計(jì)要素,某些特定情況下可能推導(dǎo)出源代碼。反編譯作為自己開發(fā)軟件時(shí)的參考,或者直接用于自己的軟件產(chǎn)品中。

三、Java類的編譯與反編譯

我們?cè)谧畛鯇W(xué)習(xí)Java的時(shí)候,會(huì)接觸到兩個(gè)命令:javac和java,那個(gè)時(shí)候我們就知道,javac是用來編譯Java類的,就是將我們寫好的helloworld.java文件編譯成helloworld.class文件。

class文件打破了C或者C++等語言所遵循的傳統(tǒng),使用這些傳統(tǒng)語言寫的程序通常首先被編譯,然后被連接成單獨(dú)的、專門支持特定硬件平臺(tái)和操作系統(tǒng)的二進(jìn)制文件。通常情況下,一個(gè)平臺(tái)上的二進(jìn)制可執(zhí)行文件不能在其他平臺(tái)上工作。而Javaclass文件是可以運(yùn)行在任何支持Java虛擬機(jī)的硬件平臺(tái)和操作系統(tǒng)上的二進(jìn)制文件。

那么反編譯呢,就是通過helloworld.class文件得到j(luò)ava文件(或者說是程序員能看懂的Java文件)

四、什么時(shí)候會(huì)用到反編譯

1、我們只有一個(gè)類的class文件,但是我們又看不懂Java的class文件,那么我們可以把它反編譯成我們可以看得懂的文件。

2、學(xué)習(xí)Java過程中,JDK的每個(gè)版本都會(huì)加入越來越多的語法糖,有些時(shí)候我們想知道Java一些實(shí)現(xiàn)細(xì)節(jié),我們可以借助反編譯。

五、反編譯工具

1、javap

2、Jad:官網(wǎng)(墻裂推薦)

客戶端:

可以在官網(wǎng)下載可執(zhí)行文件,找到對(duì)應(yīng)的操作系統(tǒng)的對(duì)應(yīng)版本,然后進(jìn)行安裝使用。

因?yàn)槲沂褂玫氖莑inux操作系統(tǒng),所以我下載的是Linux版本的工具,這個(gè)工具下載好之后會(huì)有一個(gè)執(zhí)行文件,只要在執(zhí)行文件所在目錄執(zhí)行./jadhelloworld.class就會(huì)在當(dāng)前目錄下生成helloworld.jad文件,該文件里就是我們很熟悉的Java代碼

Eclipse插件:

下載地址在官網(wǎng)下載插件的jar包,然后將jar包放到eclipse的plugins目錄下‘在打開Eclipse,Eclipse-Window-Preferences-Java,此時(shí)你會(huì)發(fā)現(xiàn)會(huì)比原來多了一個(gè)JadClipse的選項(xiàng),單擊,在Pathtodecompiler中輸入你剛才放置jad.exe的位置,也可以制定臨時(shí)文件的目錄。當(dāng)然在JadClipse下還有一些子選項(xiàng),如Debug,Directives等,按照默認(rèn)配置即可?;九渲猛戤吅螅覀兛梢圆榭匆幌耤lass文件的默認(rèn)打開方式,Eclipse-Window-Preferences-General-Editors-FileAssociations我們可以看到class文件的打開方式有兩個(gè),JadClipse和Eclipse自帶的ClassFileViewer,而JadClipse是默認(rèn)的。全部配置完成,下面我們可以查看源碼了,選擇需要查看的類,按F3即可查看源碼

如何用Java代碼編譯Java文件

簡(jiǎn)單點(diǎn)的,自己去運(yùn)行javac編譯

復(fù)雜點(diǎn)的,javax.tools.ToolProvider有個(gè)getSystemJavaCompiler方法,他可以幫你找,并在內(nèi)存中編譯

用shell腳本怎樣編譯java工程

用shell腳本怎樣編譯java工程

編譯java工程一般直接用IDE或者用Ant、Maven之類的工具,很少有人用純shell來編譯java工程。正好遇到這樣一個(gè)應(yīng)該,用這篇博文做一下記錄。

案例:用eclipse寫了一個(gè)java project,然后編譯打成jar包。

這個(gè)可以采用eclipse自帶的Export就可以導(dǎo)出jar了。但是為了軟件自動(dòng)化等巴拉巴拉的原因,采用存shell腳本編譯。

如圖所示,java project的名稱為iec104,下面src是源文件目錄,bin是所引用的jar包目錄,現(xiàn)在要進(jìn)行編譯,并且打成jar,如果對(duì)jar有所了解,都知道jar有個(gè)MANIFEST.MF文件,iec104工程的MF文件內(nèi)容如下:

就是制定了運(yùn)行的main-class(有public static void main(String args[])的類)。

將這個(gè)文件拷貝到iec104的根目錄下,然后執(zhí)行腳本compile.sh,內(nèi)容如下:

#!/bin/bash

cur_dir=$(pwd)

echo $cur_dir

function do_compile_iec104(){

# ? ?echo $cur_dir

iec104=$cur_dir/iec104

iec104_src=$cur_dir/iec104/src

iec104_bin=$cur_dir/iec104/bin

# ? ?echo $iec104_src

# ? ?echo $iec104_bin

iec104_class=$cur_dir/iec104/class

# 將iec104的src目錄下的所有java文件的名稱存入到iec104/src/sources.list文件中

rm -rf $iec104_src/sources.list

find $iec104_src -name "*.java" $iec104_src/sources.list

cat ?$iec104_src/sources.list

# $iec104_class是存放編譯的class文件的目錄

rm -rf $iec104_class

mkdir $iec104_class

# 這里開始編譯java文件,注意這里的-encoding utf-8,剛開始并沒有加入這個(gè),然后就報(bào)了一堆錯(cuò)誤,糾結(jié)了很久才發(fā)現(xiàn),這里給各位提個(gè)醒了。

javac -d $iec104_class -encoding utf-8 -classpath $iec104_bin/classes12.jar:$iec104_bin/junit-4.10.jar:$iec104_bin/log4j-1.2.17.jar:$iec104_bin/mysql-connector-java-5.0.5-bin.jar:$iec104_bin/RXTXcomm.jar -g -sourcepath $iec104_src @$iec104_src/sources.list

# 由于用到了log4j,所以要將log4j的配置文件一并放入,如果沒有用到,可以忽略這句

cp $iec104_src/log4j.properties $iec104_class

# 如果原來在iec104目錄下有jar報(bào)就刪除掉,因?yàn)橐尚碌?/p>

rm $iec104/iec104.jar

# 這里要cd到存放class的目錄,否則如果采用絕對(duì)路徑編譯,編譯出來的jar包里面就是絕對(duì)路徑了,這樣就會(huì)有問題

# jar -cvfm $iec104/iec104.jar $iec104/MANIFEST.MF $iec104_class/*這樣是錯(cuò)誤的

cd $iec104_class

jar -cvfm $iec104/iec104.jar $iec104/MANIFEST.MF *

# 賦予可執(zhí)行權(quán)限

sudo chmod a+x $iec104/iec104.jar

}

do_compile_iec104

exit 0

運(yùn)行這個(gè)腳本(linux下)就可以編譯并且在iec104的目錄下就可以看到iec104.jar文件了。

這里補(bǔ)充下java命令的基本知識(shí):

javac 用于編譯Java文件,格式為:

java [options] [sourcefiles] [@files]

其中:

options:命令行選項(xiàng);

sourcefiles:一個(gè)或多個(gè)要編譯的源文件;

@files:一個(gè)或多個(gè)對(duì)源文件進(jìn)行列表的文件,有時(shí)候要編譯的文件很多,一個(gè)個(gè)敲命令會(huì)顯得很長(zhǎng),也不方便修改,可以把要編譯的源文件列在文件中,在文件名前加@,這樣就可以對(duì)多個(gè)文件進(jìn)行編譯,對(duì)編譯一個(gè)工程很有用,方便,省事。

有幾個(gè)比較重要的選項(xiàng):

-d 用于指定編譯成的class文件的存放位置,缺省情況下不指定class文件的存放目錄,編譯的class文件將和源文件在同一目錄下;

-classpath 可以簡(jiǎn)寫成-cp,用于搜索編譯所需的class文件,指出編譯所用到的class文件的位置,如jar、zip或者其他包含class文件的目錄,指定該選項(xiàng)會(huì)覆蓋CLASSPATH的設(shè)定;

-sourcepath用于搜索編譯所需的源文件(即java文件),指定要搜索的源文件的位置,如jar、zip或其他包含java文件的目錄;

需要注意windows下和linux下文件路徑分隔符和文件列表(即-classpath和-sourcepath指定的文件)分隔符的區(qū)別:

windows下文件路徑分隔符用 \ ,文件列表分隔符用分號(hào) ;

linux下文件路徑分隔符用 / ,文件列表分隔符用冒號(hào) :

如何用javac 和java 編譯運(yùn)行整個(gè)Java工程

IDE是把雙刃劍,它可以什么都幫你做了,你只要敲幾行代碼,點(diǎn)幾下鼠標(biāo),程序就跑起來了,用起來相當(dāng)方便。你不用去關(guān)心它后面做了些什么,執(zhí)行了哪些命令,基于什么原理。然而也是這種過分的依賴往往讓人散失了最基本的技能,當(dāng)?shù)搅艘粋€(gè)沒有IDE的地方,你便覺得無從下手,給你個(gè)代碼都不知道怎么去跑。好比給你瓶水,你不知道怎么打開去喝,然后活活給渴死。 之前用慣了Myeclipse,Java文件編譯運(yùn)行的命令基本忘得一干二凈?,F(xiàn)在項(xiàng)目出了原型,放到服務(wù)器上去測(cè)試,SSH一登陸上服務(wù)器就傻眼了,都是命令行,以前程序圖標(biāo)什么的都成了浮云,程序放上去了不知道怎么去編譯運(yùn)行,只能補(bǔ)補(bǔ)課了,下面做下補(bǔ)課筆記。 一、javac命令javac 用于編譯Java文件,格式為:java [options] [sourcefiles] [@files]其中:options:命令行選項(xiàng);sourcefiles:一個(gè)或多個(gè)要編譯的源文件;@files:一個(gè)或多個(gè)對(duì)源文件進(jìn)行列表的文件,有時(shí)候要編譯的文件很多,一個(gè)個(gè)敲命令會(huì)顯得很長(zhǎng),也不方便修改,可以把要編譯的源文件列在文件中,在文件名前加@,這樣就可以對(duì)多個(gè)文件進(jìn)行編譯,對(duì)編譯一個(gè)工程很有用,方便,省事。 有幾個(gè)比較重要的選項(xiàng):-d 用于指定編譯成的class文件的存放位置,缺省情況下不指定class文件的存放目錄,編譯的class文件將和源文件在同一目錄下;-classpath 可以簡(jiǎn)寫成-cp,用于搜索編譯所需的class文件,指出編譯所用到的class文件的位置,如jar、zip或者其他包含class文件的目錄,指定該選項(xiàng)會(huì)覆蓋CLASSPATH的設(shè)定;-sourcepath用于搜索編譯所需的源文件(即java文件),指定要搜索的源文件的位置,如jar、zip或其他包含java文件的目錄;需要注意windows下和linux下文件路徑分隔符和文件列表(即-classpath和-sourcepath指定的文件)分隔符的區(qū)別:windows下文件路徑分隔符用 \ ,文件列表分隔符用分號(hào) ;linux下文件路徑分隔符用 / ,文件列表分隔符用冒號(hào) :二、java命令java 用于執(zhí)行程序,格式如下:java [options] classfile options:命令行選項(xiàng),一般用于 -classpath 指定要執(zhí)行的文件所在的位置以及需要用到的類路徑,包括jar、zip和class文件目錄,會(huì)覆蓋CLASSPATH的設(shè)定三、腳本如果要敲的命令很長(zhǎng),每次要編譯運(yùn)行的時(shí)候都要重新敲一遍,這是一件很痛苦的事情,所以用腳本可以大大方便你的工作量。在linux下用shell腳本,windows下用bat批處理程序。因?yàn)槭窃趌inux下,我這里只是簡(jiǎn)單介紹一下shell,關(guān)于bat批處理程序的語法自己百度一下,不難。 1. 開頭linux有很多不同的shell,通常使用bash(bourne again shell),程序必須以下面的行開始:#!/bin/sh #!用來告訴系統(tǒng)用后面的參數(shù)來執(zhí)行程序,這里使用的是/bin/sh要使你的腳本能夠執(zhí)行,還必須讓這個(gè)文件有可執(zhí)行權(quán)限,使用下面命令更改文件權(quán)限:chmod +x filename 2. 注釋以#開始的句子表示注釋,一直到這行結(jié)束,多寫注釋有利于以后重新看的時(shí)候知道自己在做什么3. 變量shell的腳本的變量都是字符串,不用申明類型,定義的時(shí)候直接 變量=值 即可,用到變量的的時(shí)候用 $變量 或者 ${變量},echo命令用于打印,舉個(gè)例子:#!/bin/sh # 定義變量words,值為hello world words="hello world" # 打印變量words的值echo $words 4. 命令shell腳本里面可以直接任意使用linux命令,要用到什么命令直接敲進(jìn)去即可。記住一些常用的命令:cd 打開目錄ls -l 顯示目錄信息rm -fr 遞歸刪除目錄及下面的文件,不提示信息mkdir 創(chuàng)建目錄pwd 顯示當(dāng)前路徑kill -9 pid 強(qiáng)制殺掉某個(gè)進(jìn)程號(hào)的進(jìn)程pkill 殺掉某個(gè)名字的進(jìn)程ps aux 顯示運(yùn)行進(jìn)程信息netstat -pan 查看網(wǎng)絡(luò)端口監(jiān)聽情況四、例子下面是文件compile,用于編譯整個(gè)java工程,把編譯的文件放到指定目錄下: view plain #!/bin/sh # Define some constants ONSSERVER=ONSServer PROJECT_PATH=/root/iot-oid JAR_PATH=$PROJECT_PATH/lib BIN_PATH=$PROJECT_PATH/bin SRC_PATH=$PROJECT_PATH/src/$ONSSERVER # First remove the sources.list file if it exists and then create the sources file of the project rm -f $SRC_PATH/sources find $SRC_PATH/com -name *.java $SRC_PATH/sources.list # First remove the ONSServer directory if it exists and then create the bin directory of ONSServer rm -rf $BIN_PATH/$ONSSERVER mkdir $BIN_PATH/$ONSSERVER # Compile the project javac -d $BIN_PATH/$ONSSERVER -classpath $JAR_PATH/jdom.jar:$JAR_PATH/oro-2.0.8.jar @$SRC_PATH/sources.list下面是文件run,用于執(zhí)行程序:view plain #!/bin/sh # Define some constants ONSSERVER=ONSServer PROJECT_PATH=/root/iot-oid JAR_PATH=$PROJECT_PATH/lib BIN_PATH=$PROJECT_PATH/bin # Run the project as a background process nohup java -classpath $BIN_PATH:$JAR_PATH/jdom.jar:$JAR_PATH/oro-2.0.8.jar com.ONSServer.DoUDPRequest 以上是對(duì)javac、java和shell腳本的簡(jiǎn)單總結(jié),用的比較簡(jiǎn)單,如有錯(cuò)誤,歡迎指正! 個(gè)人原創(chuàng),腦力產(chǎn)品,實(shí)屬不易,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處!

標(biāo)題名稱:java代碼編譯工程,java代碼編譯過程
網(wǎng)站地址:http://sd-ha.com/article42/dsspjhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、外貿(mào)建站服務(wù)器托管、Google、網(wǎng)站收錄、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)