最近项目需要实现自定义生成java类与jsp页面,网上搜索很多资料对java类编译这块大多数使用jdk1.6的新特性compiler API进行编译,最后因为服务器环境为weblogic10.0无法使用jdk1.6,而放弃使用,改成使用调用dos命令的方法,在此总结一下,便于以后查阅。
一,路径
1.获取服务器路径
String filePath= Thread.currentThread().getContextClassLoader()
.getResource("").getPath();
filePath= filePath.split("classes")[0];
filePath= filePath.replaceAll("%20", " ");
2.类存放路径
String fileName = filePath+"classes/com/vingsoft/res/entity/TEST.java";
二,java类拼接
String source = "package com.vingsoft.res.entity;"
+ rt
// +"import java.util.Date;"+rt
+ "import javax.persistence.Column;"
+ rt
+ "import javax.persistence.Entity;"
+ rt
+ "import javax.persistence.GeneratedValue;"
+ rt
+ "import javax.persistence.GenerationType;"
+ rt
+ "import javax.persistence.Id;"
+ rt
+ "import javax.persistence.SequenceGenerator;"
+ rt
+ "import javax.persistence.Table;"
+ rt // 导入需要的架包
+ "public class TEST"
+ rt
+ "{"
+ rt
+ "private Long uuid;"+ rt
+ "public Long getUuid() {" + rt
+ "return uuid;" + rt + "}" + rt
+ "public void setUuid(Long uuid) {" + rt + "this.uuid = uuid;"
+ rt + "}" + rt;
//... 省略其他动态生成
source += "}";
三,流输入文件(UTF-8格式,防止乱码)
/**
* 创建UTF格式文件
*
* @author 大龙
* @date 2012-11-1 下午05:35:22
* @param fileName生成文件路径
* @param source
* 文件内容
* @return
*/
public static boolean writeUTFFile(String fileName, String source) {
boolean bool = false;
FileOutputStream fos = null;
OutputStreamWriter osw = null;
try {
fos = new FileOutputStream(fileName);
osw = new OutputStreamWriter(fos, "UTF-8");
osw.write(source);
bool = true;
} catch (Exception e) {
e.printStackTrace();
bool = false;
} finally {
if (osw != null) {
try {
osw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return bool;
}
四,编译java类
1.String cp为类中需要调用的jar包路径,引用的class文件直接引用到classes即可
2.getSystemByFile方法是配置了system.properties属性,因为在linux系统下;要换成:
/**
* 编译java类
*
* @author 大龙
* @date 2012-11-1 下午05:45:56
* @param filePath
* D:/develop/tomcat/webapps/com/WEB-INF
* @param fileName
*/
public static boolean toCreateClass(String filePath, String fileName) {
// 得到写文件路径
// filePath = "D:/develop/tomcat/webapps/com/WEB-INF";
// fileName = "/controller/T_CATA_CEController";
String path = filePath + "lib";// 架包路径
String classPath = filePath + "classes";// 编译类路径
try {
Runtime rt = Runtime.getRuntime();
rt.exec("javac -cp "+getSystemByFile(path,classPath)+" "+filePath + fileName);
return true;
} catch (Throwable t) {
t.printStackTrace();
return false;
}
}
/**
* 获取系统环境
* @author 大龙
* @date 2012-11-21 上午09:34:08
* @param path
* @param classPath
* @return
*/
private static String getSystemByFile(String path,String classPath){
String cp=path
+ "/spring-beans-3.0.5.RELEASE.jar;"
+ path
+ "/spring-jdbc-3.0.5.RELEASE.jar;"
+ path
+ "/spring-context-3.0.5.RELEASE.jar;"
+ path
+ "/iframework-1.0.6.jar;"
+ path
+ "/spring-tx-3.0.5.RELEASE.jar;"
+ path
+ "/hibernate-jpa-2.0-api-1.0.0.Final.jar;"
+ path
+ "/hibernate-core-3.6.1.Final.jar;"
// controller
+ path
+ "/servlet-api-2.3.jar;"
+ path
+ "/spring-web-3.0.5.RELEASE.jar;"
+ path
+ "/iframework-1.0.6.jar;"
+ path
+ "/commons-lang-2.6.jar;"
// classes类
+ classPath // 引入的类文件
;
Properties prop = new Properties();
try {
InputStream in = new BufferedInputStream(new FileInputStream(classPath+"/system.properties"));
prop.load(in);
String sys=prop.getProperty("system").trim();
if(sys.equals("linux")){
cp=cp.replaceAll(";", ":");
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("引用包:"+cp);
return cp;
}
大龙
2012/11/21
分享到:
相关推荐
Java调用Linux命令 调用Runtime.exec方法将产生一个本地的进程,并返回一个Process子类的实例, (注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例), 该实例可用于控制进程或取得进程的...
使用runtime, 实现java客户端多次调用linux命令或者shell脚本,并返回对应结果或信息
onnx的java包,pom引入后可以试验java调用onnx文件进行cpu模型推理。 具体见https://github.com/microsoft/onnxruntime/blob/master/java/src/test/java/sample/ScoreMNIST.java 和 ...
解决Java新建进程问题 Java调用应用程序 可以学会如何使用Java的Runtime类的exec
本文实例讲述了C#实现的调用DOS命令操作类。分享给大家供大家参考。具体如下: /*********************************** * All Rights Reserved , Copyright (C) 2012 , EricHu. * 作 者: EricHu * 创建时间: ...
JRE 1.4.2 JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
JAVA如何调用DOS命令,用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。
JRE(Java Runtime Environment)——windows Java运行环境 64bit
java实现动态波形曲线显示 java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令。 cmd /c dir 是执行完dir命令后关闭命令窗口。 cmd /k dir 是执行完dir命令后不关闭命令窗口。 cmd /c...
ArcGIS Runtime SDK for Java 100.12.0 的...如需在生产环境中使用ArcGIS Runtime SDK for Java,请联系ESRI公司获得授权,现在也有国产替代产品GeoScne Runtime SDK for Java,可以联系易智瑞公司获得相关资源和授权。
Java Runtime Environment-6.0.26.exe
Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序...
JRE1.8.0(Java Runtime Environment)——Java运行环境32bit
基于java.lang.Runtime封装的用于简化java调用命令行的工具
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一些Java工具和Java的核心类库(Java API)。不论什么Java应用服务器实质都是内置了某个版本的JDK。另外,可以把Java API类库中的Java SE API...
Java Runtime Environment 1.6.0.7 (32-bit
Java程序是如何执行CMD命令的,就是需要RunTime、Process类而已。 具体代码在文档中
蜂鸣器exe,可用java调用 Runtime.getRuntime().exec("d:\\beep.exe");
java runtime environment 1.8.0_45 64bit.rar
解决了从官方下载的包运行报错this application requires a java runtime environment 1.7.0-1.8.0的问题,内部修改了pom的jre相关配置。文件包含: luyten-0.7.0.exe luyten-0.7.0.jar