电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

手動編譯并運行Java項目實現過程解析

瀏覽:5日期:2022-08-22 17:52:04

現在Java開發基本上就是IDE調試,如果跨平臺打個jar包過去運行一般就可以了,但是有些情況比如需要引入外部依賴的時候,這個時候是不能直接運行的,還需要引入一些外部的參數,并不是簡單的javac和java的關系了,下面來詳細說一下

一般情況下,在本地都是使用eclipse開發工具進行開發,很多東西基本上就不用我們考慮了,如果我們要將項目放到Linux下運行的話,那么就需要進行轉移的操作,當然有Maven、Ant這樣的自動化部署工具,簡直是太方便了,為了做到更進一步認識的話,我們純手動的去打包一個java的項目

首先,項目名稱為JarTest,在eclipse結構如下圖所示:

手動編譯并運行Java項目實現過程解析

包名和類名都看的非常清楚了,App是主類,包含有main方法;TestBean是一個JavaBean實體;TestService是一個利用TestBean進行簡單計算的類,那么各個類的代碼如下:

App.java

package net.javatest.package1;import java.util.ArrayList;import java.util.List;import net.javatest.package2.TestBean;import net.javatest.package3.TestService;public class App { public static void main(String[] args) { List<TestBean> tb = new ArrayList<TestBean>(); String[] names = {'hacker','nginx','github','hadoop','storm','solr','kafka','spark'}; for(int i = 0;i < names.length;i++) { tb.add(new TestBean(String.valueOf(i),names[i])); } List<String> namelist = TestService.nameList(tb); for(int i = 0;i < namelist.size();i++) { System.out.println(namelist.get(i)); } }}

TestBean.java

package net.javatest.package2;public class TestBean { private String id; private String name; public TestBean() { } public TestBean(String id, String name) { this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}

TestService.java

package net.javatest.package3;import java.util.ArrayList;import java.util.List;import net.javatest.package2.TestBean;public class TestService { public static List<String> nameList(List<TestBean> tbs) { List<String> names = new ArrayList<String>(); for(TestBean tb : tbs) { names.add(tb.getName()); } return names; }}

文件就是這樣,源程序都不依賴于外部包,其實在eclipse中自動已經進行編譯成class了,我們可以直接使用class文件,在這里我們直接使用源文件進行編譯,首先打包上傳項目,壓縮成JarTest.zip上傳到服務器,

手動編譯并運行Java項目實現過程解析

接下來解壓釋放目錄:

unzip JarTest.zipcd JarTest/src

因為我們打包項目的時候打包的項目外層目錄,所以解壓出來需要進入JarTest這個目錄,我們的源代碼文件在src中,現在開始編譯:

javac net/javatest/package1/App.java net/javatest/package2/TestBean.java net/javatest/package3/TestService.java

這樣回車之后,沒任何提示就編譯好了,現在每個包下都有一個和源文件對應的class文件,如果感覺上面太長太麻煩,可以使用通配符全部搞定編譯:

javac net/javatest/package*/*.java

這樣就全部編譯完了,現在我們可以執行一下看一下運行結果,

java net.javatest.package1.App

這樣就可以直接App的main方法了,接下來可以進行打包,打成一個jar包,用起來更方便,我們可以用eclipse打成jar包看一下目錄結構,我們會發現jar包如果解壓出來之后,會看到META-INF的一個目錄,這個目錄中有一個MANIFEST.MF文件,這個文件就是定義如何導入外部jar包以及主類的存在位置,接下來我們自己編寫MANIFEST.MF這個文件,我們使用命令:vim MANIFEST.MF創建一個文件,直接在當前也就是src目錄下創建即可,然后我們編輯以下內容:

Manifest-Version: 1.0Main-Class: net.javatest.package1.App

第一行是固定格式,定義版本號,第二行就是指明主類的位置可以用空格分開多個聲明,注意冒號之后要有一個空格;然后注意的就是后面需要空出2行,輸入兩次換號即可,然后我們保存退出,執行下面命令打包:

jar -cvfm jartest.jar MANIFEST.MF net/

其中jartest.jar就是要打的包,net就是我們的包目錄,現在我們就可以看到一個jartest.jar這樣一個文件,

手動編譯并運行Java項目實現過程解析

然后我們執行下面命令就可以運行該jar文件了

java -jar jartest.jar

如果jar包中具有多個包含main方法的類時,需要指定Main-Class定義的其中之一,命令如下:

java -jar jartest.jar net.javatest.package1.App

以上是沒有任何外部依賴的Java項目的運行,如果有其他依賴的話,具體運行情況如下,我們將剛才打好的jar包下載,然后新建另外一個項目去調用jar包里面類中的方法,項目如下:

手動編譯并運行Java項目實現過程解析

只有一個主類,代碼很簡單,就是調用了jartest.jar的方法,JarTest2.java代碼如下:

package net.javatest;import java.util.ArrayList;import java.util.List;import net.javatest.package2.TestBean;import net.javatest.package3.TestService;public class JarTest2 { public static void main(String[] args) { List<TestBean> tb = new ArrayList<TestBean>(); String[] names = {'test2','nginx','hbase','hadoop','storm','solr','kafka','spark'}; for(int i = 0;i < names.length;i++) { tb.add(new TestBean(String.valueOf(i),names[i])); } List<String> namelist = TestService.nameList(tb); for(int i = 0;i < namelist.size();i++) { System.out.println(namelist.get(i)); } }}

這時候將jartest.jar導入項目的path里面,編譯的時候就不會出錯了,我們繼續上傳該項目,進行編譯,編譯命令如下:

javac -classpath ../lib/jartest.jar: net/javatest/JarTest2.java

導入多個外部jar包時需要用:分割,并且最后一個后面必須有冒號,-classpath參數用于指定外部jar包和類文件都可以,運行的時候也需要進行包含,運行命令如下:

java -classpath ../lib/jartest.jar: net.javatest.JarTest2

接下來將項目打包,打包之前同樣執行vim MANIFEST.MF編輯文件如下:

Manifest-Version: 1.0Main-Class: net.javatest.JarTest2Class-Path: lib/jartest.jar

這里第三行導入外部jar包文件,多個文件依賴用空格分隔,目錄無所謂這里是相對于打包后jar文件的目錄,就是說lib目錄和打包后的jar文件在一個目錄即可正常運行,接下來打包:

jar -cvfm jartest2.jar MANIFEST.MF net/

打包后直接使用java -jar jattest.jar是不能執行的,需要將剛才的lib復制過來才可以,執行下面命令:

cd ..cp -r lib/ src/

復制剛才的lib目錄過來即可,現在執行java -jar jartest2.jar即可正常運行了

綜合來說,對于一個復雜的項目,編譯以及運行時除了系統類庫的支持,還需要引入外部jar包或者類文件才能保證整個項目的正常運行,具體的執行流程需要不斷地去熟悉

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 间甲酚,间甲酚厂家-山东祥东新材料 | 耙式干燥机_真空耙式干燥机厂家-无锡鹏茂化工装备有限公司 | 深圳侦探联系方式_深圳小三调查取证公司_深圳小三分离机构 | 日本SMC气缸接头-速度控制阀-日本三菱伺服电机-苏州禾力自动化科技有限公司 | 【黄页88网】-B2B电子商务平台,b2b平台免费发布信息网 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 算命免费_生辰八字_免费在线算命 - 卜算子算命网 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | 扬子叉车厂家_升降平台_电动搬运车|堆高车-扬子仓储叉车官网 | 办公室家具_板式办公家具定制厂家-FMARTS福玛仕办公家具 | 建筑资质代办-建筑资质转让找上海国信启航 | 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 | 球磨机,节能球磨机价格,水泥球磨机厂家,粉煤灰球磨机-吉宏机械制造有限公司 | 有福网(yofus.com)洗照片冲印,毕业聚会纪念册相册制作个性DIY平台 | 郑州爱婴幼师学校_专业幼师培训_托育师培训_幼儿教育培训学校 | 湖南长沙商标注册专利申请,长沙公司注册代理记账首选美创! | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 | 外贸网站建设-外贸网站设计制作开发公司-外贸独立站建设【企术】 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 快速门厂家批发_PVC快速卷帘门_高速门_高速卷帘门-广州万盛门业 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 济南办公室装修-厂房装修-商铺装修-工装公司-山东鲁工装饰设计 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 自动化改造_智虎机器人_灌装机_贴标机-上海圣起包装机械 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | SEO网站优化,关键词排名优化,苏州网站推广-江苏森歌网络 | 德国GMN轴承,GMN角接触球轴承,GMN单向轴承,GMN油封,GMN非接触式密封 |