麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

向高手請教ant構建工具的類裝載器問題

2019-11-18 13:35:55
字體:
來源:轉載
供稿:網友
問題概述:每個ClassLoader本身只能分別加載特定位置和目錄中的類,但是,ClassLoader被設計成了一種委托模式,使得某一個ClassLoader可以委托它的父級類裝載器去加載類,從而讓應用程序可以借助某一個子級的ClassLoader去多個位置和目錄中進行類的加載。這就好比“兒子”除了可以花自己的錢,他還可以花“父親”的錢,“父親”又可以花“父親的父親”的錢,所以,最終能通過“兒子”花出去的錢包括他歷代前輩的錢。類裝載器一級級委托到BootStrap類加載器,當BootStrap無法加載當前所要加載的類時,然后才一級級回退到子孫類裝載器去進行真正的加載。當回退到最初的類裝載器時,假如它自己也不能完成類的裝載,那就應報告ClassNotFoundException異常。

  現在的問題是,我編寫了一個類裝載器去加載特定目錄中的類,使用java.exe測試這個類加載器時,測試結果完全正常,可以看到委托效果。而我使用ant工具去調用測試程序時,結果就有點問題了,我編寫的類裝載器似乎并沒有委托其父級類加載器去加載類,而總是自己加載。由于本人才學疏淺,且實在沒有精力去研究ant工具的源碼,無法了解其類加載內部細節,現在特針對這個問題,向真正的java高手們請教。為了便于高手們快速了解我的問題所在,也便于一些中手們學習,我寫出了具體的實驗步驟,對于java新手,建議不要參與討論了,免得我耽誤了您寶貴時間。

  1.源程序:MainClass.java

package cn.itcast;
public class MainClass
{
 public static void main(String [] args)
 {
  ClassLoader loader = MainClass.class.getClassLoader();
  //打印出當前的類裝載器,及該類裝載器的各級父類裝載器
  while(loader != null)
  {
   System.out.PRintln(loader.getClass().getName());
   loader = loader.getParent();
  }
  //加載AuxiliaryClass類
  System.out.println(AuxiliaryClass.class.getName());
 }
}
  源程序:AuxiliaryClass.java

package cn.itcast;
public class AuxiliaryClass
{}
  2.源文件及build結果文件的目錄結構

f:/project
__src
__cn
__itcast
__MainClass.java
__AuxiliaryClass.java
__build.xml
__classes
__cn
__itcast
__MainClass.class
__AuxiliaryClass.class
  3.build.xml文件內容

<project name="antloader" default="run">
<property name="classes.dir" value="classes" />
<property name="src.dir" value="src" />

<target name="init">
<mkdir dir="${classes.dir}" />
</target>

<target name="compile" depends="init">
<javac destdir="${classes.dir}" >
<src path="${src.dir}" />
</javac>
</target>

<target name="run" depends="compile">
<java classname="cn.itcast.MyClassLoader">
<classpath>
<pathelement location="${classes.dir}"/>
</classpath>
</java>
</target>
</project>
  4.進入project目錄中運行ant,執行結果正常,如下:

org.apache.tools.ant.loader.AntClassLoader2
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader
cn.itcast.AuxiliaryClass
  5.修改build.xml文件,將最后名稱為“run”的target(執行目標)修改成如下形式,即不設置其中的<classpath>子元素。

<target name="run" depends="compile">
<java classname="cn.itcast.MyClassLoader">
<!--classpath>
<pathelement location="${classes.dir}"/>
</classpath-->
</java>
</target>
  再次執行ant,將報告如下錯誤信息:

Could not find cn.itcast.MainClass. Make sure you have it in your classpath
at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:170)
  在執行ant的命令行窗口中設置classpath環境變量:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产一区二区三区撒尿在线 | 91丝袜 | 久久精品视频12 | 欧日韩| 黄色一级片免费在线观看 | 成人做爰s片免费看网站 | 亚洲综合一区二区三区 | 国产毛片网 | 爽爽淫人网 | 亚洲骚综合 | av资源在线天堂 | 黄色成人在线播放 | 国产xxxxx在线观看 | 久久久久久久久浪潮精品 | 国产午夜网 | 亚洲情av | 亚洲成人久久精品 | 国产午夜亚洲精品理论片大丰影院 | 亚洲成人高清在线观看 | 久久久一区二区三区精品 | 国产精品久久久久久久久粉嫩 | 福利免费在线 | 精品一区二区三区网站 | 男女羞羞视频在线免费观看 | 久久丝袜脚交足黄网站免费 | 高清国产免费 | 色99久久 | 请播放一级毛片 | 精品人人人人 | h视频免费观看 | 欧美成人一区二区视频 | 欧美日韩免费一区 | 成人午夜视频免费在线观看 | 毛片大全 | 欧美成人精品一区 | 国产69精品久久99不卡免费版 | 91精品国产91久久久久久蜜臀 | 国产午夜精品久久久久婷 | 中文字幕精品在线观看 | 91精品国产一区二区在线观看 | 嗯~啊~用力~高h |