最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

手動(dòng)編譯并運(yùn)行Java項(xiàng)目實(shí)現(xiàn)過程解析

 更新時(shí)間:2020年10月12日 14:59:38   作者:小得盈滿  
這篇文章主要介紹了手動(dòng)編譯并運(yùn)行Java項(xiàng)目實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

  現(xiàn)在Java開發(fā)基本上就是IDE調(diào)試,如果跨平臺(tái)打個(gè)jar包過去運(yùn)行一般就可以了,但是有些情況比如需要引入外部依賴的時(shí)候,這個(gè)時(shí)候是不能直接運(yùn)行的,還需要引入一些外部的參數(shù),并不是簡單的javac和java的關(guān)系了,下面來詳細(xì)說一下

  一般情況下,在本地都是使用eclipse開發(fā)工具進(jìn)行開發(fā),很多東西基本上就不用我們考慮了,如果我們要將項(xiàng)目放到Linux下運(yùn)行的話,那么就需要進(jìn)行轉(zhuǎn)移的操作,當(dāng)然有Maven、Ant這樣的自動(dòng)化部署工具,簡直是太方便了,為了做到更進(jìn)一步認(rèn)識(shí)的話,我們純手動(dòng)的去打包一個(gè)java的項(xiàng)目

  首先,項(xiàng)目名稱為JarTest,在eclipse結(jié)構(gòu)如下圖所示:

  

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

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;
  }

}

  文件就是這樣,源程序都不依賴于外部包,其實(shí)在eclipse中自動(dòng)已經(jīng)進(jìn)行編譯成class了,我們可以直接使用class文件,在這里我們直接使用源文件進(jìn)行編譯,首先打包上傳項(xiàng)目,壓縮成JarTest.zip上傳到服務(wù)器,

  

  接下來解壓釋放目錄:

unzip JarTest.zipcd JarTest/src

  因?yàn)槲覀兇虬?xiàng)目的時(shí)候打包的項(xiàng)目外層目錄,所以解壓出來需要進(jìn)入JarTest這個(gè)目錄,我們的源代碼文件在src中,現(xiàn)在開始編譯:

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

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

javac net/javatest/package*/*.java

  這樣就全部編譯完了,現(xiàn)在我們可以執(zhí)行一下看一下運(yùn)行結(jié)果,

java net.javatest.package1.App

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

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

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

jar -cvfm jartest.jar MANIFEST.MF net/

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

  然后我們執(zhí)行下面命令就可以運(yùn)行該jar文件了

java -jar jartest.jar

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

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

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

  

  只有一個(gè)主類,代碼很簡單,就是調(diào)用了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));
    }
  }

}

  這時(shí)候?qū)artest.jar導(dǎo)入項(xiàng)目的path里面,編譯的時(shí)候就不會(huì)出錯(cuò)了,我們繼續(xù)上傳該項(xiàng)目,進(jìn)行編譯,編譯命令如下:

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

  導(dǎo)入多個(gè)外部jar包時(shí)需要用:分割,并且最后一個(gè)后面必須有冒號(hào),-classpath參數(shù)用于指定外部jar包和類文件都可以,運(yùn)行的時(shí)候也需要進(jìn)行包含,運(yùn)行命令如下:

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

  接下來將項(xiàng)目打包,打包之前同樣執(zhí)行vim MANIFEST.MF編輯文件如下:

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

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

jar -cvfm jartest2.jar MANIFEST.MF net/

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

cd ..cp -r lib/ src/

  復(fù)制剛才的lib目錄過來即可,現(xiàn)在執(zhí)行java -jar jartest2.jar即可正常運(yùn)行了

  綜合來說,對于一個(gè)復(fù)雜的項(xiàng)目,編譯以及運(yùn)行時(shí)除了系統(tǒng)類庫的支持,還需要引入外部jar包或者類文件才能保證整個(gè)項(xiàng)目的正常運(yùn)行,具體的執(zhí)行流程需要不斷地去熟悉

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何利用Spring的@Import擴(kuò)展點(diǎn)與spring進(jìn)行無縫整合

    如何利用Spring的@Import擴(kuò)展點(diǎn)與spring進(jìn)行無縫整合

    這篇文章主要介紹了如何利用Spring的@Import擴(kuò)展點(diǎn)與spring進(jìn)行無縫整合的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Mybatis?sql與xml文件讀取方法詳細(xì)分析

    Mybatis?sql與xml文件讀取方法詳細(xì)分析

    這篇文章主要介紹了Mybatis?sql與xml文件讀取方法,在執(zhí)行一個(gè)自定義sql語句時(shí),dao對應(yīng)的代理對象時(shí)如何找到sql,也就是dao的代理對象和sql之間的關(guān)聯(lián)關(guān)系是如何建立的
    2023-01-01
  • java使用反射創(chuàng)建并操作對象的方法

    java使用反射創(chuàng)建并操作對象的方法

    這篇文章主要介紹了java使用反射創(chuàng)建并操作對象的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 微信APP支付(IOS手機(jī)端+java后臺(tái))版

    微信APP支付(IOS手機(jī)端+java后臺(tái))版

    這篇文章主要為大家詳細(xì)介紹了微信APP支付(IOS手機(jī)端+java后臺(tái))版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Java聊天室之實(shí)現(xiàn)聊天室客戶端功能

    Java聊天室之實(shí)現(xiàn)聊天室客戶端功能

    這篇文章主要為大家詳細(xì)介紹了Java簡易聊天室之實(shí)現(xiàn)聊天室客戶端功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以了解一下
    2022-11-11
  • SpringBoot 集成JUnit5的詳細(xì)操作過程

    SpringBoot 集成JUnit5的詳細(xì)操作過程

    JUnit5是最新的Java單元測試框架,提供了靈活的測試支持,它由JUnit Platform、JUnit Jupiter和JUnit Vintage組成,支持不同環(huán)境下的測試運(yùn)行,SpringBoot從2.2版本開始默認(rèn)支持JUnit5,本文介紹了SpringBoot 集成JUnit5的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • 深入剖析Java ReentrantLock的源碼

    深入剖析Java ReentrantLock的源碼

    ReentrantLock和Synchronized都是Java開發(fā)中最常用的鎖,與Synchronized這種JVM內(nèi)置鎖不同的是,ReentrantLock提供了更豐富的語義。本文就來深入剖析一下ReentrantLock源碼,需要的可以參考一下
    2022-11-11
  • java中的Integer的toBinaryString()方法實(shí)例

    java中的Integer的toBinaryString()方法實(shí)例

    這篇文章主要介紹了java中的Integer的toBinaryString()方法實(shí)例,有需要的朋友可以參考一下
    2013-12-12
  • Xml中使用foreach遍歷對象實(shí)現(xiàn)代碼

    Xml中使用foreach遍歷對象實(shí)現(xiàn)代碼

    這篇文章主要介紹了Xml中使用foreach遍歷對象實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • spring?IOC控制反轉(zhuǎn)原理詳解

    spring?IOC控制反轉(zhuǎn)原理詳解

    這篇文章主要為大家詳細(xì)介紹了spring?IOC控制反轉(zhuǎn)原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論

边坝县| 锡林郭勒盟| 三明市| 宣汉县| 白山市| 汾西县| 阳高县| 都兰县| 宣武区| 乐亭县| 宜兰市| 卢氏县| 玉龙| 赤壁市| 富蕴县| 台中市| 都昌县| 石屏县| 博野县| 蕉岭县| 赞皇县| 铜山县| 收藏| 无锡市| 响水县| 英德市| 郯城县| 康马县| 游戏| 安平县| 右玉县| 天峻县| 岳阳县| 礼泉县| 新田县| 古田县| 咸丰县| 包头市| 大连市| 桐庐县| 丰都县|