# Example usage of JavaClass::Classpath and JavaClass::Classpath::TrackingClasspath: # Use the classes of one module and mark all their dependencies. Then find all modules # which were not referenced. This list contains potential unused libraries (modules). # Note that the libraries may still be used by reflection or internal from other libraries.

# Author

Peter Kofler

# Copyright

Copyright © 2009, Peter Kofler.

# License

BSD License

# # === Steps #

# require 'javaclass/dsl/mixin' #

# 1) create a classpath of the main module(s) under test # main_classpath = classpath(“#{main_location};#{test_location}”) # puts “#{main_classpath.count} classes found in main classpath:” # puts “ #{main_classpath.elements.join(”n “)}” #

# 2) mix in JavaClass::Classpath::TrackingClasspath before creating any new classpaths # require 'javaclass/classpath/tracking_classpath' #

# 3) create the (tracking) composite classpath of the given workspace # cp = workspace(location) # puts “#{cp.elements.size} classpaths found under the workspace #{location}” # puts “ #{cp.elements.join(”n “)}” # puts “#{cp.count} classes found in classpaths” #

# 4) mark all their referenced types as accessed in the workspace # puts 'mapping referenced classes… (can take several minutes)' # cp.reset_access # main_classpath.external_types.each { |clazz| cp.mark_accessed(clazz) } # puts 'referenced classes mapped' #

# 5a) now find non accessed modules/libraries (i.e. classpath elements) # unused = cp.elements.find_all { |clp| clp.jar? && clp.accessed == 0 } # puts “n#{unused.size} unused modules found:n #{unused.join(”n “)}” #

# 5b) or print the list of classpath elements (e.g. JARs) with their access # puts “nlibrary (module path): number of accessed classes” # puts cp.elements.map { |clp| [clp.to_s, clp.accessed] }. # sort { |a,b| a <=> b }. # map { |e| “ #{e}: #{e}” }