How can I extract .class files from .jar files?

2019-06-21 05:58发布

A quick question: I like the look of this bit of Ant:

<fileset dir="${lib}">  
   <patternset refid="myPattern" />  
</fileset>

So I could use this e.g. to copy a few .jar files from ${lib} that match myPattern.

What if what I really want is to look into each .jar in ${lib} and select only .class files that match myPattern?

标签: ant
4条回答
小情绪 Triste *
2楼-- · 2019-06-21 06:18

I'm pretty sure you'd need to unjar the jars and then do the copy of class files.

查看更多
祖国的老花朵
3楼-- · 2019-06-21 06:19

This should work with antcontrib's For task

<for param="file">
  <path>
    <fileset dir="${lib}" includes="*.jar"/>
  </path>
  <sequential>
    <unjar src="@{file}" dest="${dest}">
      <patternset refid="myPattern>
    </unjar>
  </sequential>
</for>
查看更多
Ridiculous、
4楼-- · 2019-06-21 06:33

You can use the archives resource collection to extract several files from multiple archives:

<copy todir="somedir">
    <restrict>
        <!-- This is just an example, you can use any restriction -->
        <name name="somePattern"/> 
            <archives>
                <zips>
                    <fileset dir="${lib}" includes="**/*.jar" />
                </zips>
        </archives>
    </restrict>
</copy>
查看更多
贼婆χ
5楼-- · 2019-06-21 06:34

The unjar task does pretty much what you want here out of the box. Use a fileset to specify the jar files you want to extract from, and a patternset to specify which files to extract.

<unjar dest="${dest.dir}">
  <patternset refid="myPattern" />
  <fileset dir="${lib}" includes="*.jar" />
</unjar>
查看更多
登录 后发表回答