一.关于javac的-g
通过javac工具可以从.java文件编译成.class文件,编译后,一些信息可保留或不保留.其中编译参数g解析如下:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
source 源文件调试信息
lines 行号调试信息
vars 本地变量调试信息
如果不使用-g来编译,只保留源文件和行号信息.个人理解相当于-g:source,lines
如果只使用-g来编译.个人理解相当于-g:source,lines,vars
a.使用E:\>d:\jdk7\bin\javac TestJava.java编译
b.使用d:\webdesign\ide\jadclipse\jad TestJava.class反编译结果如下,发现局部变量信息已丢掉:
a.使用E:\>d:\jdk7\bin\javac -g TestJava.java或使用d:\jdk7\bin\javac -g:source,lines,vars TestJava.java编译
b.使用d:\webdesign\ide\jadclipse\jad TestJava.class反编译结果如下,发现三者信息都保留:
a.注释testMethod方法内二行代码,即现在的TestJava.java内容为
c.使用d:\webdesign\ide\jadclipse\jad TestJava.class反编译结果如下,发现vars信息都还是丢掉了:
比如controller方法:
方法1.使用eclipse编译的时候就勾上上面的'添加变量属性到生成的类文件'选项去编译spring的controller.
方法2.使用spring的@RequestParam注解,比如@RequestParam("id")显式表明从请求过来的id参数值映射到这个变量去.
再有,如果使用ant进行编译也不要忘了使用debug="true",下面也是一个例子:
通过javac工具可以从.java文件编译成.class文件,编译后,一些信息可保留或不保留.其中编译参数g解析如下:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
source 源文件调试信息
lines 行号调试信息
vars 本地变量调试信息
如果不使用-g来编译,只保留源文件和行号信息.个人理解相当于-g:source,lines
如果只使用-g来编译.个人理解相当于-g:source,lines,vars
TestJava.java文件
public class TestJava{
public void testMethod(String you,Integer me){
System.out.print(you);
System.out.print(me);
}
public static void main(String[] args){
System.out.print(123);
}
}
情况1:
a.使用E:\>d:\jdk7\bin\javac TestJava.java编译
b.使用d:\webdesign\ide\jadclipse\jad TestJava.class反编译结果如下,发现局部变量信息已丢掉:
import java.io.PrintStream;
public class TestJava
{
public TestJava()
{
}
public void testMethod(String s, Integer integer)
{
System.out.print(s);
System.out.print(integer);
}
public static void main(String args[])
{
System.out.print(123);
}
}
情况2:
a.使用E:\>d:\jdk7\bin\javac -g TestJava.java或使用d:\jdk7\bin\javac -g:source,lines,vars TestJava.java编译
b.使用d:\webdesign\ide\jadclipse\jad TestJava.class反编译结果如下,发现三者信息都保留:
import java.io.PrintStream;
public class TestJava
{
public TestJava()
{
}
public void testMethod(String you, Integer me)
{
System.out.print(you);
System.out.print(me);
}
public static void main(String args[])
{
System.out.print(123);
}
}
情况3:
a.注释testMethod方法内二行代码,即现在的TestJava.java内容为
public class TestJava{
public void testMethod(String you,Integer me){
//System.out.print(you);
//System.out.print(me);
}
public static void main(String[] args){
System.out.print(123);
}
}
b.使用E:\>d:\jdk7\bin\javac -g TestJava.java或使用d:\jdk7\bin\javac -g:source,lines,vars TestJava.java编译
c.使用d:\webdesign\ide\jadclipse\jad TestJava.class反编译结果如下,发现vars信息都还是丢掉了:
import java.io.PrintStream;
public class TestJava
{
public TestJava()
{
}
public void testMethod(String s, Integer integer)
{
}
public static void main(String args[])
{
System.out.print(123);
}
}
二.扩展
比如controller方法:
@RequestMapping(value="/findById",method=RequestMethod.GET)
public String findById(Model model,Integer id) {
User user=userService.findById(id);
model.addAttribute("user", user);
return "user/result";
}
如果请求过来的参数id=1,会发现spring无法将1的值映射到上面的id请求变量,并且spring mvc会抛异常.解决这样的方法有两种:
方法1.使用eclipse编译的时候就勾上上面的'添加变量属性到生成的类文件'选项去编译spring的controller.
方法2.使用spring的@RequestParam注解,比如@RequestParam("id")显式表明从请求过来的id参数值映射到这个变量去.
再有,如果使用ant进行编译也不要忘了使用debug="true",下面也是一个例子:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="build" name="test">
<property environment="env"/>
<property name="JAVA_HOME" value="D:/jdk7"/>
<property name="ECLIPSE_HOME" value="D:/eclipseWeb"/>
<property name="javac.exe" value="${JAVA_HOME}/bin/javac" />
<property name="target" value="1.7"/>
<property name="source" value="1.7"/>
<path id="Maven Dependencies.libraryclasspath">
<pathelement location="../../mvnrepo/org/springframework/spring-webmvc/3.2.8.RELEASE/spring-webmvc-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/org/springframework/spring-beans/3.2.8.RELEASE/spring-beans-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/org/springframework/spring-context/3.2.8.RELEASE/spring-context-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/org/springframework/spring-aop/3.2.8.RELEASE/spring-aop-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/aopalliance/aopalliance/1.0/aopalliance-1.0.jar"/>
<pathelement location="../../mvnrepo/org/springframework/spring-core/3.2.8.RELEASE/spring-core-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar"/>
<pathelement location="../../mvnrepo/org/springframework/spring-expression/3.2.8.RELEASE/spring-expression-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/org/springframework/spring-web/3.2.8.RELEASE/spring-web-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/org/springframework/spring-orm/3.2.8.RELEASE/spring-orm-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/org/springframework/spring-jdbc/3.2.8.RELEASE/spring-jdbc-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/org/springframework/spring-tx/3.2.8.RELEASE/spring-tx-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/org/hibernate/hibernate-entitymanager/4.3.1.Final/hibernate-entitymanager-4.3.1.Final.jar"/>
<pathelement location="../../mvnrepo/org/jboss/logging/jboss-logging/3.1.3.GA/jboss-logging-3.1.3.GA.jar"/>
<pathelement location="../../mvnrepo/org/jboss/logging/jboss-logging-annotations/1.2.0.Beta1/jboss-logging-annotations-1.2.0.Beta1.jar"/>
<pathelement location="../../mvnrepo/org/hibernate/hibernate-core/4.3.1.Final/hibernate-core-4.3.1.Final.jar"/>
<pathelement location="../../mvnrepo/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
<pathelement location="../../mvnrepo/org/jboss/jandex/1.1.0.Final/jandex-1.1.0.Final.jar"/>
<pathelement location="../../mvnrepo/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
<pathelement location="../../mvnrepo/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar"/>
<pathelement location="../../mvnrepo/org/hibernate/common/hibernate-commons-annotations/4.0.4.Final/hibernate-commons-annotations-4.0.4.Final.jar"/>
<pathelement location="../../mvnrepo/org/hibernate/javax/persistence/hibernate-jpa-2.1-api/1.0.0.Final/hibernate-jpa-2.1-api-1.0.0.Final.jar"/>
<pathelement location="../../mvnrepo/org/jboss/spec/javax/transaction/jboss-transaction-api_1.2_spec/1.0.0.Final/jboss-transaction-api_1.2_spec-1.0.0.Final.jar"/>
<pathelement location="../../mvnrepo/org/javassist/javassist/3.18.1-GA/javassist-3.18.1-GA.jar"/>
<pathelement location="../../mvnrepo/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2.jar"/>
<pathelement location="../../mvnrepo/mysql/mysql-connector-java/5.1.26/mysql-connector-java-5.1.26.jar"/>
<pathelement location="../../mvnrepo/com/fasterxml/jackson/core/jackson-databind/2.3.1/jackson-databind-2.3.1.jar"/>
<pathelement location="../../mvnrepo/com/fasterxml/jackson/core/jackson-annotations/2.3.0/jackson-annotations-2.3.0.jar"/>
<pathelement location="../../mvnrepo/com/fasterxml/jackson/core/jackson-core/2.3.1/jackson-core-2.3.1.jar"/>
<pathelement location="../../mvnrepo/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar"/>
<pathelement location="../../mvnrepo/javax/servlet/jsp/jsp-api/2.2.1-b03/jsp-api-2.2.1-b03.jar"/>
<pathelement location="../../mvnrepo/javax/servlet/jsp/jstl/javax.servlet.jsp.jstl-api/1.2.1/javax.servlet.jsp.jstl-api-1.2.1.jar"/>
<pathelement location="../../mvnrepo/org/apache/taglibs/taglibs-standard-impl/1.2.1/taglibs-standard-impl-1.2.1.jar"/>
<pathelement location="../../mvnrepo/commons-fileupload/commons-fileupload/1.3.1/commons-fileupload-1.3.1.jar"/>
<pathelement location="../../mvnrepo/commons-io/commons-io/2.2/commons-io-2.2.jar"/>
<pathelement location="../../mvnrepo/org/springframework/spring-test/3.2.8.RELEASE/spring-test-3.2.8.RELEASE.jar"/>
<pathelement location="../../mvnrepo/junit/junit/4.11/junit-4.11.jar"/>
<pathelement location="../../mvnrepo/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar"/>
</path>
<path id="test.classpath">
<pathelement location="target/classes"/>
<path refid="Maven Dependencies.libraryclasspath"/>
</path>
<target name="clean">
<echo message="删除target目录"/>
<delete dir="target"/>
</target>
<target depends="clean" name="init">
<echo message="创建target/classes编译目录"/>
<mkdir dir="target/classes"/>
</target>
<target depends="init" name="build">
<echo message="拷贝src/main/resources文件到编译目录target/classes"/>
<copy includeemptydirs="false" todir="target/classes">
<fileset dir="src/main/resources">
<exclude name="**/*.java"/>
<include name="**"/>
</fileset>
</copy>
<echo message="编译src/main/java到编译目录target/classes"/>
<javac debug="true" debuglevel="source,lines,vars" fork="true" executable="${javac.exe}" encoding="UTF-8" destdir="target/classes" includeantruntime="false" source="${source}" target="${target}">
<src path="src/main/java"/>
<classpath refid="test.classpath"/>
</javac>
</target>
<target depends="build" name="jar" description="TO JAR THE PROJECT">
<echo message="打包编译目录target/classes"/>
<jar destfile="target/${ant.project.name}.jar" basedir="target/classes" />
</target>
</project>