2012-01-24 13 views
2

Webアプリケーションでは、ソースコードを難読化するために、yGuardを使用し、難読化されたjarファイルを取得しました。今、私は(私のJSPファイルがJavaファイルへの参照を持っているとして)WEB-INF/libにフォルダにこのjarファイルを配置し、Antスクリプトの下に使用してwarファイルにパッケージ:難読化された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 Fiのleはクラスファイルの参照を取得できませんか?
  • 難読化されたjarファイルをwarファイルに含めて完全に動作させるにはどうすればよいですか(または上記の問題を解決しますか)。

答えて

0

YGaurdは、Main-Class属性のJarファイルを読み込むことになっています...マニフェストを生成するAntが正しいように見えますが、マニフェストは正常に出力されますか?

また、あなたの名前の変更要素でmainclassを指定することができます。 <rename logfile="renamelog.xml" mainclass="${main-class}>

どちらの方法は、難読化されてからメインクラスを防ぐ必要があります。

+0

お返事ありがとうございます。上記のantスクリプトは、warファイルを難読化し、正常にビルドします。私の主なクラスは難読化されていなければなりません。 –

関連する問題