1. 程式人生 > >JAVA——包(package)及對jar包的操作

JAVA——包(package)及對jar包的操作


對類檔案進行分類管理。
給類提供多層名稱空間。
寫在程式檔案的第一行。
類名的全稱的是 包名.類名。
包也是一種封裝形式。

總結:
包與包之間進行訪問,被訪問的包中的類以及類中的成員,需要public修飾。

不同包中的子類還可以直接訪問父類中被protected許可權修飾的成員。
包與包之間可以使用的許可權只有兩種,public protected。
這裡寫圖片描述

c:\myclass

c:\myclass\packb\DemoA.class
c:\myclass\packb\haha\DemoZ.class

import packb.*;
import packb.haha.*;

為了簡化類名的書寫,使用一個關鍵字,import.
import 匯入的是包中的類。
建議,不要寫萬用字元 * ,需要用到包中的哪個類,就匯入哪個類。

建立定包名不要重複,可以使用url來完成定義,url是唯一的。

jar包

jar檔案聽說過嗎,沒有?或者陌生!好,沒關係,這就是我們的第一站:打包釋出。

為什麼會有這個玩意呢,首先,這是jar的全稱:JavaTM Archive (JAR) file,是的,就是java存檔檔案。這有點類似zip檔案,想一想它是幹什麼的用的呢,壓縮!?沒錯就是要壓縮,將我們原先零散的東西放到一下,重新組織,所有這些目的只有一個:方便!好了,不用管他是怎麼壓縮的,我們的重點是哪些是我們要壓縮的(輸入),還有壓縮成了什麼(輸出),進而將它釋出(部署)。

  那我們的輸入(要壓縮的東西)主要是class檔案,還有輔助的資源(這其中可能有圖片,jsp檔案,html檔案等等)。Jar技術在jdk1.1版本中就已存在,在1.2中又有了增強。接下來說說jar的好處吧,這是官方的描述:安全,快速下載,壓縮,獵取包,版本化包,可攜。  

  說了這麼多,我們現在開始實施。   

  先開啟命令提示符(win2000或在執行框裡執行cmd命令,win98為DOS提示符),輸入jar Chelp,然後回車(如果你盤上已經有了jdk1.1或以上版本),看到什麼:   

  用法:jar {ctxu}[vfm0Mi] [jar-檔案] [manifest-檔案] [-C 目錄] 檔名 …   

  選項:   

  -c 建立新的存檔

  -t 列出存檔內容的列表

  -x 展開存檔中的命名的(或所有的〕檔案

  -u 更新已存在的存檔

  -v 生成詳細輸出到標準輸出上

  -f 指定存檔檔名

  -m 包含來自標明檔案的標明資訊

  -0 只儲存方式;未用zip壓縮格式

  -M 不產生所有項的清單(manifest〕檔案

  -i 為指定的jar檔案產生索引資訊

  -C 改變到指定的目錄,並且包含下列檔案:  

  如果一個檔名是一個目錄,它將被遞迴處理。   

  清單(manifest〕檔名和存檔檔名都需要被指定,按’m’ 和 ‘f’標誌指定的相同順序。   

  示例1:將兩個class檔案存檔到一個名為 ‘classes.jar’ 的存檔檔案中:

  jar cvf classes.jar Foo.class Bar.class   

  示例2:用一個存在的清單(manifest)檔案 ‘mymanifest’ 將 foo/ 目錄下的所有檔案存檔到一個名為 ‘classes.jar’ 的存檔檔案中:

  jar cvfm classes.jar mymanifest -C foo/ .   

  來個小例子試試看:

  我們只有一個HelloWorld,如下:   

public class HelloWorld{ 
  public static void main(String[ ] args){ 
  System.out.println("Hi, Hello World!"); 
  } 
  }   

 將這個java檔案存到C盤跟目錄下,ok,接下來,   
 在先前開啟的命令提示符下(跳轉到C盤提示符下),我們輸入javac HelloWorld.java,然後繼續輸入:jar cvf hello.jar HelloWorld.class,回車後去你的C盤看看,多了什麼,沒錯 hello.jar 。

  基本的步驟我們現在都知道了,你可以自己去嘗試一下隨著jar後面的引數的不同,結果有什麼變化。   
  緊接著我們看看如何執行我們的jar包。   

  在進入正題之前,你要先開啟我們剛剛做好的jar包看看,多了什麼呢,META-INF目錄?再看看裡面是什麼,還有一個MANIFEST.MF檔案是不是?用文字編輯器(我這裡是UltraEdit)開啟它看看:

  Manifest-Version: 1.0
  Created-By: 1.4.2 (Sun Microsystems Inc.)   

  就是這樣。這裡我們對它進行修改,加一句:Main-Class: HelloWorld (在第三行)。這個就是我們之前寫的那個類,也就是我們的入口類。也即,


  
Manifest-Version: 1.0
  Created-By: 1.4.2 (Sun Microsystems Inc.)
  Main-Class: HelloWorld
 

接下來,我們在命令提示符裡執行:
這裡我們對它進行修改,加一句:Main-Class: HelloWorld (在第三行,注意在Main-Class:和類之間要有一個空格,否則執行時說“Invalid or corrupt jarfile xxx.jar”)。這個就是我們之前寫的那個類,也就是我們的入口類。也即:(檔案未尾的兩個空行不能少,否則執行時也說“Invalid or corrupt jarfile xxx.jar”)



Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class: HelloWorld

接下來,我們在命令提示符裡執行:   
jar umf MANIFEST.MF hello.jar
  這樣我們使用了我們自己的MANIFEST.MF檔案對原來預設的進行了更新(其實也可用winrar之類的解壓工具開啟jar包,把新的MANIFEST.MF拖進去)。最後的一步,驗證我們做的一切,在命令提示符中輸入:

Ok,這個最後的一步了,來驗證我們做的一切,在命令提示符中輸入:

  java -jar hello.jar(執行)   

  出現了什麼, Hi, Hello World!

二、關於MANIFET.MF檔案:
打 Java 包的時候可以有一個清單檔案:MANIFEST.MF,它是打包的關鍵性檔案,主要是設定執行入口類和支援庫的路徑,在執行Java 應用程式時會根據此檔案中給出的資訊來查詢入口類和支援庫。
它的內容一般包括:
Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class: HelloWorld

其中比較容易忽略的是還可以有一個Class-Path屬性的設定,Class-Path:用來指定支援庫的路徑,程式執行時依據 Class-Path項的設定路徑來查詢支援庫,每一個支援庫之間用空格分開。比如這樣寫清單檔案:
Manifest-Version: 1.0
Class-Path: ./lib/msbase.jar ./lib/mssqlserver.jar ./lib/msutil.jar
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class: org.qiujy.test.TestDB

這樣當前目錄的 lib 目錄下的幾個包都可以在執行時被找到,我們製作可自執行的 Java 程式時,就不用寫一個批處理檔案來寫明 CLASSPATH ,直接在這裡指定就可以了。
示例:
1) 在D:\qiujyJarTest目錄下寫一個測試資料庫連線的類:

package org.qiujy.test;

import java.sql.*;

public class TestDB{

   public static void main(String[] args){
        String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=myblog";
        try{
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            Connection conn = DriverManager.getConnection(url, "sa","");
            System.out.println(conn);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

2) 用如下命令編譯此檔案:
javac -d . TestDB.java
就會在當前目錄生成帶包結構的TestDB.class檔案:

3) 在當前檔案下建立一jar清單檔案qiujyManifest.txt (檔名隨便取):(注意每行的”:”後有一空格,檔案未尾有兩空行)
Manifest-Version: 1.0
Class-Path: ./lib/msbase.jar ./lib/mssqlserver.jar ./lib/msutil.jar
Main-Class: org.qiujy.test.TestDB

此時D:\qiujyJarTest目錄的結構如下:

4) 用如下命令打jar包:
jar -cmvf qiujyManifest.txt test.jar lib org
此命令的含義是:指定打包的清單檔案為當前目錄下的qiujyManifest.txt,打當前目錄下的lib和org目錄打到test.jar包中。此時在當前目錄下就會生成一個test.jar包。
5) 測試打包是否成功:
啟動sqlserver資料庫。在命令列用如下命令:java -jar test.jar。如果出現如下資訊說明我們打的包成功執行併成功連上資料庫。

  我們再來看看jar檔案在tomcat中釋出,注意:在tomcat中我們就不能再用jar這種格式,而改war格式,它是專門用於web應用的,其實整個過程下來基本上和jar是類似的: 

  先準備我們要打包的資源。   

  找到存放tomcat的webapps目錄,進到其中,新建一個資料夾,這裡命名為hello,再進去新建WEB-INF資料夾,再進去新建 classes資料夾,此時我們也將我們唯一的servlet,HelloWorld.java放到這裡,在與classes目錄同級下建立一檔案 web.xml。Ok,目前我們初步建立了一個簡單的web應用。  

  這是HelloWorld.java:   

import java.io.*; 
  import javax.servlet.*; 
  import javax.servlet.http.*; 
  public class HelloWorld extends HttpServlet { 
  public void doGet(HttpServletRequest req, HttpServletResponse res) 
  throws ServletException, IOException { 
  res.setContentType("text/html"); 
  PrintWriter out = res.getWriter(); 
  out.println(""); 
  out.println(""); 
  out.println(""); 
  out.println("Hello, World!"); 
  out.println(""); 
  } 
  }//end here!  

  對它編譯。下面是web.xml:




  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
  <web-app>
  <servlet>
  <servlet-name>hello</servlet-name>
  <servlet-class>HelloWorld</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/HelloWorld</url-pattern>
  </servlet-mapping>
  </web-app>

在命令提示符下進到先前創制的hello目錄下,執行 jar cvf hello.war * ,我們便得到hello.war。將它拷貝至webapps目錄下,ok,來看最後一步,開啟tomcat的目錄conf中的server.xml,加入:

<Context path="/hello" docBase="hello.war" debug="0" reloadable="true"/>

  大功告成!執行它,啟動tomcat,後在瀏覽器中輸入http://localhost:8080/hello/HelloWorld,有了嗎? 
  最後,如果你想用ant來完成以上的打包活動,下面就告訴你:
  對於jar來說。在build.xml中,
  

<target name="jar">
  <jar destfile="${app_home}/hello.jar">
  <fileset dir="${dest}" includes="**"/>
  <!--fileset dir="${dest}" includes="**/action.properties"/-->
  </jar>
  </target>  
  對於war,   


  <war warfile="hello.war" webxml="./WEB-INF/web.xml">
  <fileset dir="html"/>
  <lib dir="lib/">
  <exclude name="oracle*.jar"/>
  </lib>
  <classes dir="build/servlets">
  <include name="**/*.class"/>
  </classes>
  </war>  

  補充: 
  jar基本操作:   
  1. 建立jar檔案
   
  jar cf jar-file input-file(s)
  c—want to Create a JAR file.
  f—want the output to go to a file rather than to stdout.
  eg: 1)jar cf myjar.jar query_maintain_insert.htm
  2)jar cvf myjar.jar query_maintain_insert.htm
  v—Produces verbose(詳細的) output.
  3)jar cvf myjar.jar query_maintain_insert.htm mydirectory
  4)jar cv0f myjar.jar query_maintain_insert.htm mydirectory
  0—don’t want the JAR file to be compressed.
  5)jar cmf MANIFEST.MF myjar.jar yahh.txt
  m—Used to include manifest information from an existing manifest file.
  6)jar cMf MANIFEST.MF myjar.jar yahh.txt
  M—the default manifest file should not be produced.
  7)jar cvf myjar.jar *
  *—create all contents in current directory.  

  2. 察看jar檔案   
  jar tf jar-file
  t—want to view the Table of contents of the JAR file.
  eg: 1)jar vft yahh.jar
  v—Produces verbose(詳細的) output.  

  3. 提取jar檔案  
  jar xf jar-file [archived-file(s)]
  x—want to extract files from the JAR archive.
  eg: 1)jar xf yahh.jar yahh.txt(僅提取檔案yahh.txt)

  2)jar xf yahh.jar alex/yahhalex.txt(僅提取目錄alex下的檔案yahhalex.txt)  

  3)jar xf yahh.jar(提取該jar包中的所有檔案或目錄)  

  4. 修改Manifest檔案  
  jar cmf manifest-addition jar-file input-file(s)
  m—Used to include manifest information from an existing manifest file.  

  5. 更新jar檔案  
  jar uf jar-file input-file(s)
  u—want to update an existing JAR file.

相關推薦

JAVA——(package)jar操作

包 對類檔案進行分類管理。 給類提供多層名稱空間。 寫在程式檔案的第一行。 類名的全稱的是 包名.類名。 包也是一種封裝形式。 總結: 包與包之間進行訪問,被訪問的包中的類以及類中的成員,需要public修飾。 不同包中的子類還可以直接訪

java實現:jar中的配置檔案修改

注:只修改檔案,其他會被清空  package com.mtpc.admin.util; import java.io.*; import java.util.*; import java.util.jar.JarEntry; import java.util.jar.J

JAVA上傳檔案至HDFS程式碼對應jar

最近需要將本地採集到的檔案上傳到遠端伺服器的HDFS檔案系統當中,弄了很久,找程式碼,找JAR包,很麻煩,記錄一下。 原始碼部分很簡單: import java.io.BufferedInput

Java程式碼加密與反編譯(一):利用混淆器工具proGuardjar加密

Java 程式碼編譯後生成的 .class 中包含有原始碼中的所有資訊(不包括註釋),尤其是在其中儲存有除錯資訊的時候。所以一個按照正常方式編譯的 Java .class 檔案可以非常輕易地被反編譯。通常情況下,反編譯可以利用現有的工具jd-gui.exe或者jad.e

IntelliJ IDEA java項目導入jar,打jar

選項 可能 version make set 最好 tar project 沒有 一、導入 1、java項目在沒有導入該jar包之前,如圖: 2、點擊 File -> Project Structure(快捷鍵 Ctrl + Alt + Shift + s),

Java項目導出為jar+導出第三方jar+使用命令行調用+傳參

src jar div pos 新版本 string 輸入 [] ima Java項目導出為jar包+導出第三方jar包+使用命令行調用+傳參 一、打包 情況1:不需要向程序傳參數,並且程序沒有使用第三方jar包 Eclipse上導出jar:

(轉)IntelliJ IDEA java項目導入jar,打jar

標簽 blank 窗口 ava setting structure 綠色 target bsp 以下為轉載原文:https://www.cnblogs.com/yulia/p/6824058.html 一、導入 1、java項目在沒有導入該jar包之前,如圖:

nodejs連線Access資料庫,出現Error: Spawn C:\WINDOWS\SysWOW64\cscript.exe error Java專案生成可執行jar、exe檔案以及在Windows下的安裝檔案

因為集成了第三方的資料庫,所以需要獲取資料庫的資料 使用 var connection = ADODB.open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+config.id_path+';');  

mvn package打一個jar

去專案目錄下,執行mvn package(如果沒配環境變數,你需要把完整的bin目錄敲出  c:\xx\xxx\bin\mvn package) 一個jar包就打好了放到了target目錄下面,然後拷貝到linux的hdfs目錄下面,你就可以執行它了。 比如 java 

[Java] Jar2Exe,jar2工具將jar轉換成exe可執行檔案的詳細過程

[Java] Jar2Exe,jar2工具將jar包轉換成exe可執行檔案的詳細過程 軟體下載地址 連結: https://pan.baidu.com/s/1Ei39JYGpb7wyS9UkMl1GTQ 提取碼: yvkv 一、首先將程式匯出為jar包 1、在MyEcli

Java之eclipse將工具類打成Jar、使用jar、以及刪除jar

Eclipse如何匯出jar包??? 選中對應的工具類,右鍵==>Export... ==>選中Java目錄下的JAR File==>Next==>選擇匯出路徑==>Fi

使用java.lang.instrument實現第三方jar內類的修改,包括引入外部依賴,引數獲取

最近專案開發需求中,使用了第三方供應商提供的jar包形式的sdk ,sdk中的日誌由其自己管理列印,現在想獲取到日誌列印時傳入的message,就必須想辦法對sdk的原始碼進行改動。 首先想到的是反編譯jar包,然後修改後重新打包,嘗試了一下後感覺很麻煩,而且很不cool。

Java檔案匯出可執行jar

如果要匯出可執行的JAR檔案,需要選擇Runnable Jar File。 選擇要到處JAR檔案的工程,右鍵選擇“Export”;   3.在“Launch configuration”下面的下拉列表中選擇程式啟動時執行的主類(即專案中帶有main方法的類,專

java GUI程式打成jar涉及讀取工程資源無效問題解決

我們常常在程式碼中讀取一些資原始檔(比如圖片,音樂,文字等等)。在單獨執行的時候這些簡單的處理當然不會有問題。但是,如果我們把程式碼打成一個jar包以後,即使將資原始檔一併打包,這些東西也找不出來了。看看下面的程式碼: //原始碼1: package edu.hxraid; import

Java專案生成可執行jar、exe檔案以及在Windows下的安裝檔案 Java專案生成可執行jar、exe檔案以及在Windows下的安裝檔案

Java專案生成可執行jar包、exe檔案以及在Windows下的安裝檔案 1、如何通過eclipse將Java專案生成可執行jar包 首先把在eclipse下的java專案匯出jar file 下一步 下一步 下一步 最後點選完成,便生成了可執行的j

eclipse匯出java專案jar(依賴第三方jar

一.在專案根目錄下建一個檔案:MANIFEST.MF 內容: Manifest-Version: 1.0 Class-Path: lib/commons-compress-1.9.jar lib/commons-dbcp2-2.5.0.jar lib/commons-dbutils-1.7.

java編譯執行和生成jar

利用命令列來編譯執行Java程式,能夠一定程度地瞭解Java的編譯執行機制。下面我們通過HelloWorld.java來看下如何對java程式進行編譯、執行和打包。 需要編譯執行以及打包的HelloW

java專案中依賴的jar中含有相同類時的載入順序(按照)

類被載入時,會先判斷類是否已經被載入。第二個相同類不被載入。可以在Java Build Path裡調整順序。 1 新建一個javaProject,並打包,如下圖:   2 新建第二個javaProject,並打包,其中的包名和類名及方法都和第一個project一致,只是輸出不同

Java SE程式打包成jar或exe程式時,讀取配置檔案的處理

該Java SE程式打包成JAR包或exe程式的時候,配置檔案不能放在裡面;因為會時不時的修改配置檔案裡面的內容,所以必須放在外邊,以備隨時更改! Main main = new Main();

maven打可執行jar依賴jar(二)

maven打可執行jar包,包含依賴jar包(分環境) 這篇文章打包介紹跟上一篇文章http://blog.csdn.net/u012204058/article/details/52514821