Skip to content

Instantly share code, notes, and snippets.

@nileshk
Created September 28, 2013 04:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nileshk/6738433 to your computer and use it in GitHub Desktop.
Save nileshk/6738433 to your computer and use it in GitHub Desktop.
Python script to list the packages contained in a folder full of jar files (e.g. for scanning jar files in WEB-INF/lib)
#!/usr/bin/python
from __future__ import print_function
import string
import os
import sys
import re
import argparse
from subprocess import Popen, PIPE
parser = argparse.ArgumentParser(
description = "List packages contained in jar files")
parser.add_argument('-d', '--dir', required=False, nargs=1)
parser.add_argument('-v', '--verbose', required=False, action="store_true")
args = parser.parse_args()
jar_folder = (args.dir[0] if args.dir else None) or os.getcwd()
def verbose(s):
if args.verbose:
print(s)
verbose('Current folder: ' + str(jar_folder))
packages = set()
files = [f for f in os.listdir(jar_folder)
if os.path.isfile(os.path.normpath(jar_folder) + os.sep + f)
and f[-3:] == 'jar']
verbose(str(files))
for f in files:
verbose('File: ' + f)
s = Popen(['jar', 'tf', f], stdout=PIPE, cwd=jar_folder).stdout.read()
for line in s.split('\n'):
if line.find('META-INF') == -1:
verbose(line)
last_slash = line.rfind('/')
if last_slash > 0:
packages.add(line[:last_slash].replace('/', '.'))
verbose('Packages:')
for p in sorted(packages):
print(p)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment