1 -- | This module defines functions to read Java JAR files.
2 module Java.JAR.Archive where
4 import Control.Monad.Trans
5 import qualified Control.Monad.State as St
6 import qualified Codec.Archive.LibZip as Zip
8 import qualified Data.ByteString.Lazy as B
10 import Java.ClassPath.Types
11 import Java.ClassPath.Common
15 -- | Read all entires from JAR file
16 readJAR :: FilePath -> IO [Tree CPEntry]
18 files <- Zip.withArchive [] jarfile $ Zip.fileNames []
19 return $ mapF (NotLoadedJAR jarfile) (buildTree files)
21 -- | Read one class from JAR file
22 readFromJAR :: FilePath -> FilePath -> IO (Class Direct)
23 readFromJAR jarfile path = do
24 content <- Zip.withArchive [] jarfile $ Zip.fileContents [] path
25 let bstr = B.pack content
26 return $ classFile2Direct (decode bstr)
28 -- | Add given JAR file to ClassPath
29 addJAR :: FilePath -> ClassPath ()
31 classes <- liftIO $ readJAR jarfile
33 let cp' = merge $ cp ++ classes