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 readJAR :: FilePath -> IO [Tree CPEntry]
17 files <- Zip.withArchive [] jarfile $ Zip.fileNames []
18 return $ mapF (NotLoadedJAR jarfile) (buildTree files)
20 readFromJAR :: FilePath -> FilePath -> IO (Class Direct)
21 readFromJAR jarfile path = do
22 content <- Zip.withArchive [] jarfile $ Zip.fileContents [] path
23 let bstr = B.pack content
24 return $ classFile2Direct (decode bstr)
26 addJAR :: FilePath -> ClassPath ()
28 classes <- liftIO $ readJAR jarfile
30 let cp' = merge $ cp ++ classes