Ask Your Question

What is the benefit of metapackages?

asked 2017-03-08 07:29:27 -0500

Tommi gravatar image

I can't figure out what is the benefit of using metapackages, as opposed to just putting stuff in different folders.

It seems metapackages can't be whitelisted or blacklisted, they cannot be used while defining dependencies of other catkin packages. They are not allowed to have common scripts for e.g. software delivery. It's just a package.xml and CMakeLists.txt.

So what's the point?

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2017-03-08 07:45:34 -0500

gvdhoorn gravatar image

updated 2018-10-13 15:40:12 -0500

So what's the point?

They are used to group together sets of packages that form a 'coherent set' through their run_depends.

This then allows you to install - say all of the Robot variant (defined in REP-142) - with a single command:

sudo apt-get install ros-$distro-robot

instead of:

sudo apt-get install ros-$distro-actionlib ros-$distro-angles ros-$distro-bond_core ros-$distro-catkin ros-$distro-class_loader ros-$distro-cmake_modules ros-$distro-common_msgs ros-$distro-console_bridge ros-$distro-control_msgs ros-$distro-diagnostics ros-$distro-dynamic_reconfigure ros-$distro-executive_smach ros-$distro-filters ros-$distro-gencpp ros-$distro-geneus ros-$distro-genlisp ros-$distro-genmsg ros-$distro-gennodejs ros-$distro-genpy ros-$distro-geometry ros-$distro-message_generation ros-$distro-message_runtime ros-$distro-nodelet_core ros-$distro-pluginlib ros-$distro-robot_model ros-$distro-robot_state_publisher ros-$distro-ros ros-$distro-ros_comm ros-$distro-rosbag_migration_rule ros-$distro-rosconsole_bridge ros-$distro-roscpp_core ros-$distro-rosgraph_msgs ros-$distro-roslisp ros-$distro-rospack ros-$distro-std_msgs ros-$distro-std_srvs ros-$distro-xacro

which is both longer, allows for more mistakes and is harder to document.

The same infrastructure can obviously be used to group together packages created by community members. One example would be MoveIt, which has a moveit metapackage.

See REP-140 - Package Manifest Format Two Specification - Data Representation - <metapackage/> for more information on metapackages.

Edit: note that metapackages are not stacks, in that they do not physically contain other packages (ie: other packages can not and may not be sub directories of other packages).

edit flag offensive delete link more


Also: they're metapackages because they 'package' packages, and not directly installable artefacts.

gvdhoorn gravatar image gvdhoorn  ( 2017-03-09 01:44:09 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2017-03-08 07:29:27 -0500

Seen: 1,512 times

Last updated: Oct 13 '18