`
qiuqiao2000
  • 浏览: 29786 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

为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();
    		}
    	} 
分享到:
评论

相关推荐

    使用Java类加载和类路径实现一个简单的在线购物网站.txt

    这段代码实现了一个简单的购物车类ShoppingCart,其中使用了Java的类加载和类路径机制。在类的构造方法中,首先通过类加载器将购物车类加载到JVM中,然后创建了一个Map对象来存储购物车中的商品及其数量。接着实现了...

    反射,动态加载指定类调用类中的方法

    反射,动态加载指定类调用类中的方法 简单例子

    java中获取类加载路径和项目根路径的5种方式分析

    本篇文章介绍了,java中获取类加载路径和项目根路径的5种方式分析。需要的朋友参考下

    JAVA类加载

    Java 语言是一种具有动态... class 文件放到 Java 的路径当中, 等到下次该 Java 虚拟机器重新激活时,这个逻辑上的 Java 应用程序就会因为加载了新修改的 .class 文件,自己的功能也做了更新,这就是 Java 的动态性。

    解决java打包之后无法加载静态资源的问题SWTResourceManager.java源码

    利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为使用java打包之后,生成的jar包中图片找不着的。这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA环境变量设置的作用.txt

    1.JAVAHOME就是安装目录.用在 PATH,CLASSPATH的设置中免去了你再写一长串的路径,用JAVAHOME就代替安装目录....3.CLASSPATH该变量是JAVA加载类(class or lib)的路径.只有在classpath设置的路径中的类才能被加载.

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java识别图片文字/验证码源代码项目大礼包 Tess4J-3.4.7, Longan, javaocr,Java_imagetotext

    文件为压缩包,包括多个java识别图片文字的项目,国内网站上资料比较少,项目都整理出了测试类及说明,都包含着源代码及jar包、安装包、训练库。希望用得到的人少走弯路,资源都精心整理测试过,高分是必须的。 java...

    配置java环境变量.txt

    1、下载jdk...classpath:java加载类路径,只有类在classpath中java命令才能识别,在路径前加了个"."表示当前路径。 path:系统在任何路径下都可以识别java,javac命令。

    Java类加密程序

    简要介绍 JAVA CLASS文件加密工具是一款专门为保护您的JAVA源代码而设计的软件。传统的JAVA代码保护方式通常是扰乱生成的CLASS文件,从而降低反编译生成的源代码的可读性;有的保护工具甚至能生成部分废代码...

    JAVA_API1.6文档(中文)

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

    Java动态编译Java代码,运行在内存中,并执行

    *1.创建 URLClassLoader 类加载器 * 2.获取当前执行的classpath的所有jar包的路径 * 3.通过java的ToolProvider创建JavaCompile,用来执行class源文件 ...创建DynamicClassLoader来加载类 ,defineClass这个方法

    叮当书城项目-叮当书城项目部署代码视频教程带源码(java毕业设计项目-java练手项目)

    java毕业设计项目叮当书城项目|叮当书城项目部署代码视频教程带源码(|java练手项目) ​项目文件代码介绍部分内容: 1、首先就是src下面的java文件,存放的是我们后端需要的文件 2、 然后下面的bean文件,里面...

    java源码包---java 源码 大量 实例

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,...

    Java模块化类加载JBossModules.zip

    JBoss Modules 是模块化的类加载系统。...换句话说,就是加载所有 JARs 到一个平滑的类路径,每个库都是一个模块。JBoss Modules 实现一个线程安全,快速,高并发委托类加载器模型。 标签:JBoss

    spring-boot-java-util-service-loader:使用java.util.ServiceLoader的示例Spring Boot应用程序在类路径上动态加载所有SPI实现

    使用java.util.ServiceLoader示例Spring Boot应用程序在类路径上动态加载所有实现。 多项目Gradle构建 1个Spring Boot应用 1个SPI项目 2个SPI实施项目 有关java.util.ServiceLoader用法,请参见app/src/test/java/...

    Java 1.6 API 中文 New

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

Global site tag (gtag.js) - Google Analytics