元Webデザイナー兼コーダーの備忘録

ウェブデザインやプログラミング、ブログのカスタマイズなどについてアウトプットしています。

 メニュー

» HTML入門のまとめはこちらです。

jarファイルの閲覧と解凍

Javaのライブラリをダウンロードしたら、中身がjarファイルでした。ライブラリを利用する側であることが多いので、jarファイルの中身が何なのか調べました。例として、ProcessingのPBox2Dライブラリを使います。

分かったこと

  • jarファイルは、クラスファイルをまとめたもの
  • jarコマンドでjarファイルの中身を閲覧できる
  • jarコマンドでjarファイルを解凍できる

jarファイルの閲覧

jarファイルを閲覧してみる1

PBox2Dのjarファイルの内容を見てみます。PBox2Dは、Processing用のBox2Dライブラリに関連するライブラリです。

jar -tf box2d_processing.jar

コマンドの実行結果は、以下のとおりです。

META-INF/MANIFEST.MF
shiffman/box2d/Box2DProcessing.class
shiffman/box2d/Box2DContactListener.class

マニフェストファイルとクラスファイルが2つ含まれていることが分かります。

jarコマンドのオプション

  • -t:内容の一覧を表示
  • -f:jarファイル名の指定

jarファイルを閲覧してみる2

JBox2Dのjarファイルの内容を見てみます。JBox2Dは、Processing用のBox2Dライブラリです。PBox2Dライブラリをダウンロードすると一緒に取得できます。

jar -tf jbox2d-library-2.2.1-ds.jar

コマンドの実行結果は、以下のとおりです。

META-INF/MANIFEST.MF
org/jbox2d/collision/broadphase/DefaultBroadPhaseBuffer.class
org/jbox2d/collision/broadphase/DynamicTreeFlatNodes.class
org/jbox2d/collision/broadphase/Pair.class
org/jbox2d/collision/broadphase/DynamicTree.class
org/jbox2d/collision/broadphase/BroadPhaseStrategy.class
org/jbox2d/collision/broadphase/DynamicTreeNode.class
org/jbox2d/collision/broadphase/BroadPhase.class
org/jbox2d/pooling/IWorldPool.class
org/jbox2d/pooling/IDynamicStack.class
org/jbox2d/pooling/IOrderedStack.class
org/jbox2d/particle/ParticleContact.class
org/jbox2d/particle/ParticleGroupDef.class
org/jbox2d/particle/ParticleType.class
org/jbox2d/particle/ParticleColor.class
org/jbox2d/particle/VoronoiDiagram$1.class
org/jbox2d/particle/VoronoiDiagram$Generator.class
org/jbox2d/particle/VoronoiDiagram$VoronoiDiagramCallback.class
org/jbox2d/particle/VoronoiDiagram$VoronoiDiagramTask.class
org/jbox2d/particle/VoronoiDiagram.class
org/jbox2d/particle/StackQueue.class
org/jbox2d/particle/ParticleSystem$CreateParticleGroupCallback.class
org/jbox2d/particle/ParticleSystem$DestroyParticlesInShapeCallback.class
org/jbox2d/particle/ParticleSystem$JoinParticleGroupsCallback.class
org/jbox2d/particle/ParticleSystem$NewIndices.class
org/jbox2d/particle/ParticleSystem$Pair.class
org/jbox2d/particle/ParticleSystem$ParticleBuffer.class
org/jbox2d/particle/ParticleSystem$ParticleBufferInt.class
org/jbox2d/particle/ParticleSystem$Proxy.class
org/jbox2d/particle/ParticleSystem$SolveCollisionCallback.class
org/jbox2d/particle/ParticleSystem$Test.class
org/jbox2d/particle/ParticleSystem$Triad.class
org/jbox2d/particle/ParticleSystem$UpdateBodyContactsCallback.class
org/jbox2d/particle/ParticleSystem.class
org/jbox2d/particle/ParticleDef.class
org/jbox2d/particle/ParticleGroup.class
org/jbox2d/particle/ParticleGroupType.class
org/jbox2d/particle/ParticleBodyContact.class
org/jbox2d/dynamics/contacts/ContactPositionConstraint.class
org/jbox2d/dynamics/contacts/PolygonAndCircleContact.class
org/jbox2d/dynamics/contacts/Position.class
org/jbox2d/dynamics/contacts/PolygonContact.class
org/jbox2d/dynamics/contacts/EdgeAndCircleContact.class
org/jbox2d/dynamics/contacts/ContactCreator.class
org/jbox2d/dynamics/contacts/ContactRegister.class
org/jbox2d/dynamics/contacts/CircleContact.class
org/jbox2d/dynamics/contacts/Velocity.class
org/jbox2d/dynamics/contacts/ContactEdge.class
org/jbox2d/dynamics/contacts/ChainAndPolygonContact.class
org/jbox2d/dynamics/contacts/EdgeAndPolygonContact.class
org/jbox2d/dynamics/contacts/ContactSolver$ContactSolverDef.class
org/jbox2d/dynamics/contacts/ContactSolver.class
org/jbox2d/dynamics/contacts/PositionSolverManifold.class
org/jbox2d/dynamics/contacts/ChainAndCircleContact.class
org/jbox2d/dynamics/contacts/Contact.class
org/jbox2d/dynamics/contacts/ContactVelocityConstraint$VelocityConstraintPoint.class
org/jbox2d/dynamics/contacts/ContactVelocityConstraint.class
org/jbox2d/pooling/stacks/DynamicIntStack.class
org/jbox2d/dynamics/joints/DistanceJointDef.class
org/jbox2d/dynamics/joints/WheelJoint.class
org/jbox2d/dynamics/joints/LimitState.class
org/jbox2d/dynamics/joints/MouseJointDef.class
org/jbox2d/dynamics/joints/RevoluteJoint.class
org/jbox2d/dynamics/joints/MotorJointDef.class
org/jbox2d/dynamics/joints/PulleyJointDef.class
org/jbox2d/dynamics/joints/FrictionJointDef.class
org/jbox2d/dynamics/joints/Jacobian.class
org/jbox2d/dynamics/joints/ConstantVolumeJoint.class
org/jbox2d/dynamics/joints/RopeJoint.class
org/jbox2d/dynamics/joints/PrismaticJoint.class
org/jbox2d/dynamics/joints/WeldJoint.class
org/jbox2d/dynamics/joints/PrismaticJointDef.class
org/jbox2d/dynamics/joints/WheelJointDef.class
org/jbox2d/dynamics/joints/JointType.class
org/jbox2d/dynamics/joints/RevoluteJointDef.class
org/jbox2d/dynamics/joints/JointDef.class
org/jbox2d/dynamics/joints/JointEdge.class
org/jbox2d/dynamics/joints/Joint.class
org/jbox2d/dynamics/joints/MotorJoint.class
org/jbox2d/dynamics/joints/GearJointDef.class
org/jbox2d/dynamics/joints/FrictionJoint.class
org/jbox2d/dynamics/joints/MouseJoint.class
org/jbox2d/dynamics/joints/PulleyJoint.class
org/jbox2d/dynamics/joints/GearJoint.class
org/jbox2d/dynamics/joints/DistanceJoint.class
org/jbox2d/dynamics/joints/RopeJointDef.class
org/jbox2d/dynamics/joints/ConstantVolumeJointDef.class
org/jbox2d/dynamics/joints/WeldJointDef.class
org/jbox2d/pooling/normal/DefaultWorldPool$1.class
org/jbox2d/pooling/normal/DefaultWorldPool$10.class
org/jbox2d/pooling/normal/DefaultWorldPool$11.class
org/jbox2d/pooling/normal/DefaultWorldPool$12.class
org/jbox2d/pooling/normal/DefaultWorldPool$13.class
org/jbox2d/pooling/normal/DefaultWorldPool$2.class
org/jbox2d/pooling/normal/DefaultWorldPool$3.class
org/jbox2d/pooling/normal/DefaultWorldPool$4.class
org/jbox2d/pooling/normal/DefaultWorldPool$5.class
org/jbox2d/pooling/normal/DefaultWorldPool$6.class
org/jbox2d/pooling/normal/DefaultWorldPool$7.class
org/jbox2d/pooling/normal/DefaultWorldPool$8.class
org/jbox2d/pooling/normal/DefaultWorldPool$9.class
org/jbox2d/pooling/normal/DefaultWorldPool.class
org/jbox2d/pooling/normal/OrderedStack.class
org/jbox2d/pooling/normal/MutableStack.class
org/jbox2d/pooling/normal/CircleStack.class
org/jbox2d/common/Mat33.class
org/jbox2d/common/Settings.class
org/jbox2d/common/Vec3.class
org/jbox2d/common/RaycastResult.class
org/jbox2d/common/Mat22.class
org/jbox2d/common/IViewportTransform.class
org/jbox2d/common/Vec2.class
org/jbox2d/common/MathUtils.class
org/jbox2d/common/Sweep.class
org/jbox2d/common/Rot.class
org/jbox2d/common/OBBViewportTransform$OBB.class
org/jbox2d/common/OBBViewportTransform.class
org/jbox2d/common/Timer.class
org/jbox2d/common/Transform.class
org/jbox2d/common/BufferUtils.class
org/jbox2d/common/Color3f.class
org/jbox2d/common/PlatformMathUtils.class
org/jbox2d/dynamics/SolverData.class
org/jbox2d/dynamics/Filter.class
org/jbox2d/dynamics/Fixture.class
org/jbox2d/dynamics/TimeStep.class
org/jbox2d/dynamics/Profile$ProfileEntry.class
org/jbox2d/dynamics/Profile.class
org/jbox2d/dynamics/Body.class
org/jbox2d/dynamics/ContactManager.class
org/jbox2d/dynamics/World.class
org/jbox2d/dynamics/WorldQueryWrapper.class
org/jbox2d/dynamics/WorldRayCastWrapper.class
org/jbox2d/dynamics/FixtureDef.class
org/jbox2d/dynamics/Island.class
org/jbox2d/dynamics/BodyType.class
org/jbox2d/dynamics/BodyDef.class
org/jbox2d/dynamics/FixtureProxy.class
org/jbox2d/callbacks/QueryCallback.class
org/jbox2d/callbacks/ParticleQueryCallback.class
org/jbox2d/callbacks/ContactListener.class
org/jbox2d/callbacks/ParticleDestructionListener.class
org/jbox2d/callbacks/DestructionListener.class
org/jbox2d/callbacks/ContactFilter.class
org/jbox2d/callbacks/TreeCallback.class
org/jbox2d/callbacks/DebugDraw.class
org/jbox2d/callbacks/PairCallback.class
org/jbox2d/callbacks/ContactImpulse.class
org/jbox2d/callbacks/TreeRayCastCallback.class
org/jbox2d/callbacks/RayCastCallback.class
org/jbox2d/callbacks/ParticleRaycastCallback.class
org/jbox2d/collision/Manifold$ManifoldType.class
org/jbox2d/collision/Manifold.class
org/jbox2d/collision/Distance$DistanceProxy.class
org/jbox2d/collision/Distance$Simplex.class
org/jbox2d/collision/Distance$SimplexCache.class
org/jbox2d/collision/Distance$SimplexVertex.class
org/jbox2d/collision/Distance.class
org/jbox2d/collision/Collision$ClipVertex.class
org/jbox2d/collision/Collision$EPAxis$Type.class
org/jbox2d/collision/Collision$EPAxis.class
org/jbox2d/collision/Collision$EPCollider$VertexType.class
org/jbox2d/collision/Collision$EPCollider.class
org/jbox2d/collision/Collision$EdgeResults.class
org/jbox2d/collision/Collision$PointState.class
org/jbox2d/collision/Collision$ReferenceFace.class
org/jbox2d/collision/Collision$TempPolygon.class
org/jbox2d/collision/Collision.class
org/jbox2d/collision/RayCastOutput.class
org/jbox2d/collision/DistanceOutput.class
org/jbox2d/collision/SeparationFunction.class
org/jbox2d/collision/TimeOfImpact$TOIInput.class
org/jbox2d/collision/TimeOfImpact$TOIOutput.class
org/jbox2d/collision/TimeOfImpact$TOIOutputState.class
org/jbox2d/collision/TimeOfImpact.class
org/jbox2d/collision/Type.class
org/jbox2d/collision/AABB.class
org/jbox2d/collision/WorldManifold.class
org/jbox2d/collision/DistanceInput.class
org/jbox2d/collision/RayCastInput.class
org/jbox2d/collision/ManifoldPoint.class
org/jbox2d/collision/ContactID$Type.class
org/jbox2d/collision/ContactID.class
org/jbox2d/pooling/arrays/FloatArray.class
org/jbox2d/pooling/arrays/IntArray.class
org/jbox2d/pooling/arrays/GeneratorArray.class
org/jbox2d/pooling/arrays/Vec2Array.class
org/jbox2d/collision/shapes/ChainShape.class
org/jbox2d/collision/shapes/ShapeType.class
org/jbox2d/collision/shapes/Shape.class
org/jbox2d/collision/shapes/EdgeShape.class
org/jbox2d/collision/shapes/MassData.class
org/jbox2d/collision/shapes/CircleShape.class
org/jbox2d/collision/shapes/PolygonShape.class

マニフェストファイルとたくさんのクラスファイルが含まれていることが分かります。

jarファイルの解凍

jarファイルを解凍して、何が出てくるのか見てみます。

jarファイルを解凍してみる

PBox2Dのjarファイルを解凍してみます。

jar -xvf box2d_processing.jar

コマンドの実行結果は、以下のとおりです。

META-INF/MANIFEST.MFが展開されました
shiffman/box2d/Box2DProcessing.classが展開されました
shiffman/box2d/Box2DContactListener.classが展開されました

マニフェストファイルとクラスファイルが展開されました。

jarコマンドのオプション

  • -x:圧縮ファイルの展開
  • -v:コマンドラインに処理内容を表示
  • -f:jarファイル名の指定

今後の課題

  • jarファイルの作成方法を調べる
  • マニフェストファイルの記述内容を調べる

参考サイト

» HTML入門のまとめはこちらです。