seminolas
seminolas

Reputation: 409

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

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?

Upvotes: 5

Views: 6015

Answers (4)

Garns
Garns

Reputation: 416

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>

Upvotes: 1

matt
matt

Reputation: 79803

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>

Upvotes: 10

Alexander Pogrebnyak
Alexander Pogrebnyak

Reputation: 45606

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>

Upvotes: 0

Jeanne Boyarsky
Jeanne Boyarsky

Reputation: 12266

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

Upvotes: 0

Related Questions