2014-03-24 53 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档案。但是,您可以在不解压的情况下添加文件;) –