为Java项目加载类路径

Studio利用hbm配置文件生成SQL文件时,需要访问ST项目中生成的POJO类,所以要把代码生成器(org.st.studio.generator.SqlGenerator)放在ST项目中进行加载,方法如下:

  1. 把要放在项目中加载和运行的类(org.st.studio.generator.SqlGenerator)的.class文件打包到一个studio.jar文件。其中org.st.studio.generator.SqlGenerator是一个包含public static void main(String[] args)可以作为Java Application运行的类。
    public class SqlGenerator {
    	
    	/**
    	 * @param args 包括3个参数:
    	 * <li>第一个参数: hbm文件的路径,各文件路径之间用“#”分隔
    	 * <li>第二个参数:输出文件目录
    	 * <li>第三个参数:输出文件路径
    	 * 
    	 * @throws ClassNotFoundException
    	 */
    	public static void main(String[] args) throws ClassNotFoundException {
    		if (args == null || args.length != 3)
    			return;
    		
    		Configuration cfg = new Configuration();
    		cfg.getProperties().put("hibernate.dialect",
    		    "org.hibernate.dialect.Oracle9Dialect");
    		
    		String hbmPaths = args[0];
    		StringTokenizer st = new StringTokenizer(hbmPaths, "#");
    		while (st.hasMoreElements()) {
    			String path = st.nextElement().toString();
    			File file = new File(path);
    			if(file.exists()){
    				cfg.addFile(file);
    			}
    		}
    	
    		SchemaExport se = new SchemaExport(cfg);
    		
    		File dir = new File(args[1]);
    		
    		//确保所有的父文件夹都存在
    		File temp = dir; 
    		while(!temp.getParentFile().getName().equals("") ){//父文件夹不是磁盘驱动器
    			temp = temp.getParentFile();
    			if(!temp.exists()){
    				temp.mkdir();
    			}
    		}
    		
    		if(!dir.exists() ){
    			dir.mkdir();
    		}
    		if( dir.exists() && dir.isDirectory()){
    			File file = new File(args[2]);
    			se.setOutputFile(args[2]);
    		}
    		
    		se.execute(true, false, false, false);
    	}
    }
     
  2. 通过某个触发点在ST项目中加载或删除studio.jar文件。在Studio中是通过org.eclipse.wst.common.project.facet.core.facets扩展点,在给ST项目添加facet时,添加org.st.studio.project.stnatureorg.springframework.ide.eclipse.core.springnature(修改.project文件),同时也添加jar包(修改.classpath文件)。
                    /**
    	  * 在项目的classpath中添加studio.jar包
    	 * @param javaProject
    	 */
    	private void addExtenalJar(IJavaProject javaProject) {
    		try {
    			IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
    
    			IClasspathEntry entry = JavaCore.newLibraryEntry(
    					new Path(getJarPath()), null, null);
    			IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
    			System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
    			newEntries[oldEntries.length]=entry;
    			javaProject.setRawClasspath(newEntries, null);
    		} catch (JavaModelException e) {
    			e.printStackTrace();
    		}
    	}
                    /**
    	 * @return 返回studio.jar的路径
    	 */
    	private String getJarPath() {
    		URL url = Platform.getBundle(SpringUIPlugin.PLUGIN_ID).getEntry(STUDIO_ JAR);
    		try {
    			return FileLocator.toFileURL(url).getFile();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	/**
    	 * 从项目的classpath中删除studio.jar包
    	 * @param javaProject
    	 */
    	private void removeExtenalJar(IJavaProject javaProject){
    		try {
    			IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
    			List<IClasspathEntry> list=new ArrayList<IClasspathEntry>();
    			for(IClasspathEntry entry:oldEntries){
    				if(!(entry.getEntryKind()==IClasspathEntry.CPE_LIBRARY && STUDIO_JAR.equals(entry.getPath().toFile().getName())) ){
    					list.add(entry);
    				}
    			}
    			IClasspathEntry[] newEntries =(IClasspathEntry[])list.toArray(new IClasspathEntry[]{});
    
    			javaProject.setRawClasspath(newEntries, null);
    		} catch (JavaModelException e) {
    			e.printStackTrace();
    		}
    	} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值