㈠ 伺服器上替換了個jar包,修改了兩個java文件編譯後的class文件
不要修改了,給它派生出一個子類或編輯同一個類後把源類替換掉得了。
上述方法是通過調用這個類包派生出一系列類重新生成一個JAR文件與其共用,使它達到你想要的效果,不過現在想想這個辦法工作量也不小,考慮下一個試試。
你可以把他們解壓出來,然後反編譯你需要改動的那個類,改動期間再進行反編譯需要牽涉到的類,這樣就不需要全部反編輯了。
現在我還沒有別的捷徑,也很想知道。
六月十五日
想把它壓縮成jar文件,暫且把java獨立應用程序分成兩種:
1)沒有用到Package的普通程序;
2)有Package的,一般有多個.class文件才用的。
1)比如你寫的java文件的目錄是:D:\JAVA\test.java;那麼你運行完會在同一目錄下生成一個test.class文件,這時新建一個MANIFEST.txt文檔(名字看清楚了)。
打開寫入以下內容:
Manifest-Version: 1.0
Created-By: 1.5.0_08 (Sun Microsystems Inc.)
Main-Class: test
保存為MANIFEST.MF。從命令行進入到JAVA目錄下,
敲入: jar cvfm test.jar manifest.mf test
這樣就生成了test.jar文件,直接點擊就可以運行。
2)還是這個目錄:D:\JAVA\test1.java和test2.java;且兩個程序都中有package com.chat,就是把生成的.class放在裡面,這時的MANIFEST.MF(可以用寫字板打開)
內容是:
Manifest-Version: 1.0
Created-By: 1.5.0_08 (Sun Microsystems Inc.)
Main-Class: com.chat.test1
註:test1里必須有main函數。
從命令行進入到JAVA目錄下,
敲入:jar cvfm t1.jar manifest.mf com/*;test2
同理。在DOS 下
jar fc a.jar a
a 是你要打包文件夾
a.jar 是打包後的文件名 隨便命名。
㈡ java開發中,怎麼樣把外部引用的包設置相對路徑,避免項目做好後在打包的時候把外部jar文件一移動就錯了
你直接復制jar文件到項目中的lib文件夾中就可以了,這樣不需要你去引用而是移到項目中了
㈢ java窗體程序 打包jar後 怎麼動態修改xml配置信息,請問哪位大神會啊
這種做法很不好呀,應該在窗體程序中增加一個配置文件,原包中的xml文件做為原始配置不動,窗體程序運行時可做一個菜單項「配置」,新做的配置修改保存到本地一個xml文件中,以後啟動窗體程序時先檢查有沒有這個本地xml文件,有則從它裡面讀入配置,否則從類路徑的jar中讀取配置
㈣ 關於java動態載入jar的問題
設我們有一個hello.jar文件,裡面有一個Util類,我們希望在運行期調將這個jar包放入到我們運行環境並且調用裡面的Util.getVersion方法。怎麼實現?
在java中,我們的類都是通過ClassLoader來載入的,同時ClassLoader具有層級關系,當某個類找不到時,它會去他的父類載入器去尋找,如果依然找不到,就拋出ClassNotFoundException了。
為了動態載入hello.jar裡面的Util類,我們需要將這個jar包放入到我們的類載入器中去,然後再獲取裡面的類。如下面的代碼。
// 位於hello.jar
package com.flyingzl;
public class Util {
public static void getVersion(){
System.out.println("java version: " + System.getProperty("java.version"));
}
}
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
public class Main {
public static void main(String[] args) {
URL[] urls = new URL[] {};
MyClassLoader classLoader = new MyClassLoader(urls, null);
try {
classLoader.addJar(new File("c:/hello.jar").toURI().toURL());
Class<?> clazz = classLoader.loadClass("com.flyingzl.Util");
Method method = clazz.getDeclaredMethod("getVersion");
method.invoke(null);
classLoader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
static class MyClassLoader extends URLClassLoader {
public MyClassLoader(URL[] urls) {
super(urls);
}
public MyClassLoader(URL[] urls, ClassLoader parent) {
super(urls, parent);
}
public void addJar(URL url) {
this.addURL(url);
}
}
}
注意:這里僅僅是為了展示如何動態載入jar包,代碼寫得很粗,生產代碼需要有更完善的異常處理。我們只關心如何動態載入jar包即可。
動態載入jar包,需要用到java.net.URLClassLoader這個類,它可以指定一個路徑將jar包或者classes文件載入到類空間。載入完畢後,直接調用loadClass就可以載入指定的類,然後通過反射生成實例或者調用方法即可。
其實,Tomcat等伺服器也利用了此思路,比如每一個web應用啟動時,它都會自動載入其下的lib文件夾下的jar包。
運行程序,我們就可以看到程序正常輸出:
java version: 1.7.0_03
㈤ 在myeclipse中開發的java項目遇到jar包冗餘情況,如何刪除項目中的冗餘jar包啊項目很大jar包一百多個。
如果項目允許,你為什麼不在一開始的時候建立自己的Libary?或是將你用的jar包放入自製的libary.這樣方便整理和查看!而且如果你的項目jar有冗餘,證明項目開始的設計就有問題!抱歉你的問題無法解決,只是提點個人建議!
----------
OK,把你的包加入自己的libary,其他的刪掉?畢竟不用的包較多吧