2014-03-24 90 views
0

我已經編輯了我的ANT構建過程。這是我的工作清單:ANT - 我不能移動文件到JAR

  • 創建src文件夾的副本和selfwritten AntTask混淆後的所有字符串
  • ANT創建了<jar>
  • 一個JAR的JAR將ProGuard
  • 的進行模糊處理附加文件將必須被複制到JAR
  • JAR將簽署

bodled步驟是我的問題。我如何將單個文件複製到JAR的根目錄。我必須在這裏邁出這一步!之前或之後將無法工作:之前:ProGuard將嘗試混淆此文件並給出例外。無法工作後,文件必須簽名。

任何人都有一個聰明的想法?

這裏的縮小版本,我的Ant構建腳本:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<project basedir="." default="default" name="DEMO"> 
    <property environment="env" /> 
    <property name="debuglevel" value="source,lines,vars" /> 
    <property name="target" value="1.7" /> 
    <property name="source" value="1.7" /> 

    <!-- Applet Informationen --> 
    <property name="version" value="1.0.0" /> 

    <!-- Start Build process --> 
    <target name="default"> 
     <echo message="Copy source" /> 
     <delete dir="builds/temp/" /> 
     <mkdir dir="builds/temp/" /> 
     <copydir src="src" dest="builds/temp/" /> 

     <echo message="Obfuscate Strings" /> 
     <taskdef resource="task.properties" classpath="libs/MyStringHelper.jar" /> 
     <mystringhelper dir="builds/temp/" name="_X.class" decoder="MyClass.myMethod" imports="import test.MyClass;" /> 
     <javac srcdir="builds/temp/" destdir="bin" /> 
     <sleep seconds="1" /> 

     <echo message="Create JAR Archive with Version ${version}" /> 
     <jar destfile="builds/${name}${version}.jar" basedir="bin"> 
      <manifest> 
       <attribute name="Application-Name" value="${name}" /> 
       <attribute name="Application-Library-Allowable-Codebase" value="*.domain.com localhost" /> 
       <attribute name="Caller-Allowable-Codebase" value="*.domain.com localhost" /> 
       <attribute name="Codebase" value="*.domain.com localhost" /> 
       <attribute name="Permissions" value="all-permissions" /> 
       <attribute name="Author" value="Adrian Preuss" /> 
       <attribute name="Main-Class" value="main.Run" /> 
      </manifest> 
     </jar> 

     <echo message="Obfuscate the Archive" /> 
     <taskdef resource="proguard/ant/task.properties" classpath="libs/proguard.jar" /> 

     <proguard printmapping="proguard.map" overloadaggressively="off" repackageclasses="" renamesourcefileattribute="SourceFile"> 
      <injar file="builds/${name}${version}.jar" /> 
      <outjar file="builds/__${name}${version}.jar" /> 
      <libraryjar file="${java.home}/lib/rt.jar" /> 
      <libraryjar file="libs/ant.jar" /> 
      <libraryjar file="libs/gradle-plugins-1.3.jar" /> 
      <libraryjar file="libs/gradle-base-services-1.3.jar" /> 
      <libraryjar file="libs/gradle-core-1.3.jar" /> 
      <libraryjar file="libs/groovy-all-1.8.6.jar" /> 
      <libraryjar file="libs/kenv.zip" /> 

      <keeppackagename name="main" /> 
      <keep access="public" name="main.Run"> 
       <method access="public" type="void" name="changeLanguage" parameters="java.lang.String" /> 
      </keep> 
     </proguard> 

     <delete file="builds/${name}${version}.jar" failonerror="false" /> 
     <move file="builds/__${name}${version}.jar" tofile="builds/${name}${version}.jar" /> 

     <!-- 

      ## 
      ## ADD the File "builds/temp/_XA.class" to the JAR 
      ## 
      ## Info: the _XA.class is'nt an Java-Class file! 

     --> 

     <echo message="Roll up the code signing" /> 
     <signjar jar="builds/${name}${version}.jar" alias="${name}" keystore="${name}.keystore" storepass="${password}" preservelastmodified="true" /> 

     <echo message="Verify code signing" /> 
     <verifyjar jar="builds/${name}${version}.jar" alias="${name}" storepass="${password}"/> 

     <echo message="Copy applet to local environment" /> 
     <copy file="builds/${name}${version}.jar" tofile="C:/devsrv/htdocs/${name}${version}.jar" failonerror="false" /> 

     <echo message="Cleanup,..." /> 
     <!-- .... --> 
    </target> 
</project> 

回答

1

這是我的Ant構建文件的一部分,包括所有的XML,JPG,GIF和PNG:

<!-- ============================================================== --> 
<!-- Build application --> 
<!-- ============================================================== --> 
<target name="build" depends="make-bin-dir" description="Build application"> 
<javac srcdir="${src.dir}" destdir="${bin.dir}" debug="on" classpathref="javac.classpath" /> 
    <copy todir="${bin.dir}"> 
    <fileset dir="${src.dir}"> 
     <include name="**/*.xml" /> 
     <include name="**/*.jpg" /> 
     <include name="**/*.gif" /> 
     <include name="**/*.png" /> 
    </fileset> 
    </copy> 
</target> 

要想僅包括一個文件只是把全名放在include name= "fullnamehere" />

對不起...還沒有看到你的部分添加... 請試試這個:

include name= "builds/temp/_XA.class" />

+0

嘗試使用'javac'或'jar'上的很多選項,但這樣做不起作用:'javac不支持嵌套的「copy」元素.'編輯:等待,發現邏輯錯誤:) –

+0

嘿,它作品:D只有ProGuard有問題。 _XA.class不是Java類。它是一個加密的文本文件。 –

+0

我無法幫助您使用ProGuard,因爲我對此一無所知。對不起。 – LostKatana

0

由於罐確實是一個壓縮文件,可以解壓的jar到一個臨時目錄中的ProGuard就執行後,添加您希望在那個臨時目錄的_XA.class文件,並重新簽名前創建jar文件。

+0

不需要解壓縮。是的JAR文件是ZIP檔案。但是,您可以在不解壓的情況下添加文件;) –