Javaプロジェクトのためのクラスパスをロード


Studioはhbmプロファイルを利用してSQLファイルを生成する場合、STプロジェクトで生成したPOJOクラスにアクセスする必要があるので、コードジェネレータ(org.studio.generator.Sql Generator)をSTプロジェクトにロードする方法は以下の通りです。
  • プロジェクトにロードと実行するクラス(org.studio.generator.Sql Generator)のclassファイルを一つのstudio.jarファイルに包装します。ここでorg.studio.generator.Sql Generatorは、public static void main(String[]args)を含むJavaアプリとして動作するクラスです。
    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);
    	}
    }
     
  • は、あるトリガポイントを介してSTプロジェクトにstudio.jarファイルをロードまたは削除する。Studioではorg.eclipspe.wstore.com.com.project.facets拡張点を通してSTプロジェクトにfacetを追加する際にorg.studio.project.stnature、org.sprigframe.ide.eclipse.com.sprignatureを追加します。
                    /**
    	  *     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();
    		}
    	}