ant task to remove files from a jar

后端 未结 6 571
自闭症患者
自闭症患者 2020-12-13 13:45

How to write an ant task that removes files from a previously compiled JAR?

Let\'s say the files in my JAR are:

aaa/bbb/ccc/Class1
aaa/bbb/ccc/Class2         


        
相关标签:
6条回答
  • 2020-12-13 13:58

    The answers didn't quite add up for me -

    <zip destfile="tmp.jar">
            <zipfileset src="src.jar">
                    <exclude name="**/*.class" />
            </zipfileset>
    </zip>
    <move file="tmp.jar" tofile="src.jar" /> 
    

    This uses a single pass and doesn't add too much time to the build

    source : http://ant.1045680.n5.nabble.com/Remove-entru-from-ZIP-file-using-ANT-td1353728.html

    0 讨论(0)
  • 2020-12-13 14:00

    You have to unjar and rejar.

    <unzip src="myjar.jar" dest="/classes/">
    <jar destfile="newjar.jar"
        basedir="/classes/"
        includes="**/*"
        excludes="**/def/*"
    />    
    
    0 讨论(0)
  • 2020-12-13 14:04

    I came here looking to use ant as a workaround some short comings in gradle unzip.

    On the off chance someone else is in the same boat.

    Here is an example:

        task antUnzip() << {
    
                ant.jar(destfile : "stripped.jar") {
                    zipfileset (src : "full.jar", excludes : "files/to/exclude/**/*.file") {
                    }
                }
    }
    
    0 讨论(0)
  • 2020-12-13 14:12

    I am not sure if there a direct solution for your requirement. I would recommend to explode the jar to some temp directory and then remove unwanted class files. Finally create a new jar with required class files.

    Reference links:

    http://ant.apache.org/manual/Tasks/unzip.html

    http://ant.apache.org/manual/Tasks/delete.html

    http://ant.apache.org/manual/Tasks/jar.html

    0 讨论(0)
  • 2020-12-13 14:15

    If a jar-file capable archiver program, like e.g. "zip" on Linux, is available, the task can be done by

    <exec executable="zip">            
    <arg value="-d"/>            
    <arg value="myJarCopyToStrip.jar"/>            
    <arg value="aaa/bbb/def/*>            
    <arg value="aaa/bbb/def>
    </exec>
    

    Subtree deletion depends on the capabilities of the used archiver.
    The "os" attribute of the Ant "exec" task allows to use different archivers on different OS's.

    0 讨论(0)
  • 2020-12-13 14:16

    Have you tried using the zipfileset task?

    <jar destfile="stripped.jar">
        <zipfileset src="full.jar" excludes="files/to/exclude/**/*.file"/>
    </jar>
    

    For example:

    <property name="library.dir" value="dist"/>
    <property name="library.file" value="YourJavaArchive.jar"/>
    <property name="library.path" value="${library.dir}/${library.file}" />
    <property name="library.path.new" value="${library.dir}/new-${library.file}"/>
    
    <target name="purge-superfluous">
        <echo>Removing superfluous files from Java archive.</echo>
    
        <jar destfile="${library.path.new}">
            <zipfileset src="${library.path}" excludes="**/ComicSans.ttf"/>
        </jar>
    
        <delete file="${library.path}" />
        <move file="${library.path.new}" tofile="${library.path}" />
    </target>
    
    0 讨论(0)
提交回复
热议问题