2
在我的web应用程序中,为了混淆源代码,我使用了yGuard并且得到了一个混淆的jar文件。现在我把这个jar文件到WEB-INF/lib目录文件夹(如我的JSP文件具有参考java文件)和包装使用以下Ant脚本战争文件:如何将混淆的jar文件包含到war文件中
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyWebApp" default="war" basedir=".">
<property file="build.properties" />
<property name="war-file-name" value="${project-name}.war" />
<property name="source-directory" value="src" />
<property name="classes-directory" value="WebRoot/WEB-INF/classes" />
<property name="web-directory" value="WebRoot" />
<property name="web-xml-file" value="WebRoot/WEB-INF/web.xml" />
<property name="build-directory" value="build" />
<property name="lib-dir" value="WebRoot/WEB-INF/lib" />
<property name="main-class" value="com.Main"/>
<path id="compile.classpath">
<fileset dir="${lib-dir}">
<include name="*.jar"/>
</fileset>
</path>
<target name="clean">
<delete dir="${classes-directory}" />
<delete dir="${build-directory}" />
</target>
<!-- Creates the build, docs and dist directory-->
<target name="makedir">
<mkdir dir="${classes-directory}" />
<mkdir dir="${build-directory}" />
</target>
<target name="compile" depends="clean, makedir">
<javac srcdir="${source-directory}" destdir="${classes-directory}" includeantruntime="false">
<classpath refid="compile.classpath"/>
</javac>
<copy todir="${classes-directory}">
<fileset dir="src" includes="**/*.properties"/>
</copy>
</target>
<target name="jar" depends="compile">
<jar destfile="${build-directory}/${ant.project.name}.jar" basedir="${classes-directory}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
<path id="external.lib.path">
<fileset dir="${lib-dir}" includes="*.jar"/>
</path>
<target name="yguard" depends="jar">
<taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="yguard.jar"/>
<yguard>
<inoutpair in="${build-directory}/${ant.project.name}.jar" out="${build-directory}/${ant.project.name}_obf.jar"/>
<externalclasses refid="external.lib.path"/>
<rename logfile="renamelog.xml">
<keep>
<method name="void main(java.lang.String[])">
<patternset>
<include name="com.*"/>
<include name="misc.*"/>
<include name="client.*"/>
</patternset>
</method>
</keep>
</rename>
</yguard>
<copy file="${build-directory}/${ant.project.name}_obf.jar" todir="${lib-dir}"/>
</target>
<target name="war" depends="yguard">
<war warfile="${build-directory}/${war-file-name}" webxml="${web-xml-file}">
<fileset dir="${web-directory}">
<!-- Need to exclude it since webxml is an attribute of the war tag above -->
<exclude name="WEB-INF/web.xml" />
<exclude name="WEB-INF/lib/servlet-api.jar" />
<exclude name="WEB-INF/lib/jsp-api.jar" />
<exclude name="WEB-INF/classes/**/" />
</fileset>
</war>
</target>
</project>
但是当我部署此战争文件到Tomcat和访问它抛出的index.jsp以下浏览器的例外:
javax.servlet.ServletException: java.lang.NoClassDefFoundError: com/Main
现在我的问题是:
- 混淆为什么JSP连接后乐无法获得类文件的参考?
- 我该怎么做才能将我的模糊jar文件包含到war文件中以完美工作(或解决上述问题)?
感谢您的回复。上面的ant脚本成功地混淆并构建了一个war文件。我希望我的主要类必须被混淆。 –