最近项目需要实现自定义生成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中,我们通常不能直接调用DOS的cls命令,但可以通过一些技巧来实现类似的效果。 标题"java实现控制dos清屏cls"所指的是如何在Java程序中模拟DOS的清屏操作。这里提供了一种解决方案,包括两个关键文件:CLS....
在这个Java Demo中,我们将探讨如何通过调用DOS命令来达到清屏的效果。 首先,`cls`是DOS中的一个命令,全称为“clear screen”,它的作用就是清理当前屏幕的所有内容,将光标移动到屏幕的左上角。在Java程序中,...
编写Java程序需要使用文本编辑器(如记事本)创建一个.java源文件,然后通过javac命令编译它生成.class字节码文件。最后,通过java命令运行字节码文件,看到输出结果。这个过程体现了Java程序的开发运行流程:编写、...
在命令行窗口中,可以使用javac命令编译Java源文件,生成class文件,再使用java命令运行class文件。 HelloWorld案例作为Java编程入门的经典案例,展示了Java程序开发的基本流程。这个案例演示了如何在屏幕上打印...
- **常见DOS命令**: - `dir`:显示当前目录下的所有文件和文件夹。 - `md <dirname>`:创建新的目录。 - `rd <dirname>`:删除目录。 - `cd <dirname>`:进入指定目录。 - `cd ..`:返回上级目录。 - `cd /`...
### Java基础系列:JavaSE基础知识 流程语句 #### 一、JavaSE-01-基础入门 ...以上内容概括了JavaSE基础知识的主要方面,从DOS命令到Java语言特性,再到具体的编程实践,涵盖了初学者入门Java所需的基本技能和概念。
课后作业通常包括下载并安装JDK,学习DOS命令,以及通过实践加深对课堂内容的理解。 在编程实践中,遵循良好的命名规范,如类名首字母大写,使用名词性词组,是提高代码可读性和维护性的关键。此外,理解访问修饰符...
- `javac`命令用于编译Java源代码,生成`.class`字节码文件。 - `java`命令用于运行已编译的Java程序。 - 使用文本编辑器如EditPlus,可以配置快捷键或工具来自动化编译和运行过程。 4. **数据类型与运算**: -...
6. **验证安装与环境配置**:通过在DOS窗口中输入`javac`和`java`命令,检查是否能正确显示相关信息,这可以验证JDK的安装和环境变量配置是否成功。 评分标准反映了实训过程中的重点,JDK的安装和环境配置占据了大...
介绍图形化界面(GUI)和DOS命令行交互,包括如何打开命令行(如Win+R调用运行对话框输入cmd),以及常用的DOS命令,如dir、md、rd、cd、echo、type、del、exit、cls等。 通过学习这个入门篇,初学者将能够理解...
JAVA_HOME应设置为JDK的安装路径,PATH中应包含JDK的bin目录,这样在DOS命令行中可以直接调用Java相关命令。CLASSPATH在JDK 5.0之后通常不需要手动配置,因为Java能自动搜索类文件。 编写Java程序分为三个步骤:...
MATLAB的编译器(MCR,MATLAB Compiler Runtime)默认会生成带命令行窗口的可执行文件,这是因为MATLAB程序在运行时需要与操作系统进行交互,而DOS窗口就是这种交互的体现。但通过一些设置,我们可以控制这个行为。 ...
JDK 中包括了 JRE(Java Runtime Environment,Java 运行环境),用来运行 Java 程序的。JRE 只要安装在机器上,即可运行 Java 程序,实现了所谓的跨平台。 JDK 中的几个概念 * `javac.exe` 是 Java 语言的编译器...
- **OutDir_To_Txt**: 该函数使用 `system` 函数执行DOS命令将当前目录下的文件列表写入名为 `Dir.txt` 的文件中。 - **DllMain**: 这是每个DLL文件都必须有的入口点函数,它处理DLL加载过程中的各种事件。 #### ...
- **实现方式**:通过在不同平台上安装对应版本的Java虚拟机(JVM, Java Virtual Machine)来实现跨平台性。 - **JVM作用**:解释并执行Java字节码,使得Java程序能够在多种平台上运行而无需修改代码本身。 ##### ...
- **跨平台性**:Java程序可以在任何支持Java的平台上运行,这是通过Java虚拟机(JVM)实现的。Java编译器将源代码编译成字节码,JVM负责解释并执行这些字节码。 - **平台**:Java平台主要分为三个部分:Java SE...
3. **ShellExecute API调用**:当用户点击自定义的右键菜单项时,需要调用Windows API中的`ShellExecute`函数来执行对应的DOS命令。C#中可以使用`DllImport`特性导入这个API,然后在需要的地方调用。 4. **源代码...
- **JRE (Java Runtime Environment)**:Java运行时环境,提供了运行已编译Java程序所需的环境。 5. **环境变量配置** - **Path**:用于指定系统在搜索可执行文件时会查看的路径。不同路径之间使用`;`分隔。 - *...
通过在DOS窗口输入`javac`和`java`命令,观察返回的提示信息,确认JDK安装和环境变量配置是否成功。如果能正确显示版本信息,说明安装配置无误。 **JRE的区别** JRE(Java Runtime Environment)是Java程序运行所需...
JRE是Java Runtime Environment,Java运行时环境,它包含了运行Java程序所需的Java虚拟机(JVM)、类库和其他组件。 2. **Java的平台无关性** Java的平台无关性源于其“一次编写,到处运行”的理念。Java源代码会...