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ファイルの作成方法を調べる
- マニフェストファイルの記述内容を調べる