Moxie
2014-10-28 584328285c5defcf59cb3fc11494f9f056be79c8
commit | author | age
48fe87 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
M 2 <html>
3 <head>
4 <!-- Begin Header -->
5 <title>Gitblit</title>
6 <meta charset="utf-8">
7 <meta name="ROBOTS" content="INDEX">
8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
9 <meta name="viewport" content="width=device-width, initial-scale=1.0">
10         
11 <link rel="stylesheet" href="./bootstrap/css/bootstrap.css">
12 <link rel='shortcut icon' type='image/png' href='./gitblt-favicon.png' />
13 <link rel="stylesheet" href="./prettify/prettify.css" />
14 <!-- Google Plus Profile Page -->
15 <link rel="publisher" href="https://plus.google.com/114464678392593421684" />
16 <style type="text/css"> a.gpluspage { margin-top:3px;text-decoration: none; } </style>
17
18 <!-- Google Plus One -->
19 <link rel="canonical" href="http://gitblit.com" />
20 <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
21 <style type="text/css"> div.gplusone { margin-top:12px; } </style>
22
23 <script src="./prettify/prettify.js"></script>
24 <script src="./bootstrap/js/jquery.js"></script>
25 <script src="./bootstrap/js/bootstrap.min.js"></script>
26 </head>
27 <body onload='prettyPrint()'>        <!-- Navigation Bar -->
28         <div class="navbar navbar-fixed-top">
29             <div class="navbar-inner">
30                 <div class="container">
31                       <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
32                         <span class="icon-bar"></span>
33                         <span class="icon-bar"></span>
34                         <span class="icon-bar"></span>
35                       </a>
36                       <a class="brand" href="./"><img src="./gitblt_25_white.png" alt="Gitblit"></img></a>
37                     <div class="nav-collapse">
38                         <ul class="nav">
39                             <li class='dropdown'> <!-- Menu -->
40 <a class='dropdown-toggle' href='#' data-toggle='dropdown'>about<b class='caret'></b></a>
41 <ul class='dropdown-menu'>
42 <li><a href='index.html'>overview</a></li>
43 <li><a href='features.html'>features</a></li>
44 <li><a href='screenshots.html'>screenshots</a></li>
45 </ul></li> <!-- End Menu -->
46 <li class='dropdown'> <!-- Menu -->
47 <a class='dropdown-toggle' href='#' data-toggle='dropdown'>documentation<b class='caret'></b></a>
48 <ul class='dropdown-menu'>
49 <li class='dropdown-submenu'> <!-- Submenu -->
50 <a tabindex='-1' href='#'>Gitblit GO</a>
51 <ul class='dropdown-menu'>
52 <li><a href='setup_go.html'>setup GO</a></li>
53 <li><a href='upgrade_go.html'>upgrade GO</a></li>
54 </ul></li> <!-- End Submenu -->
55 <li class='divider'></li>
56 <li class='dropdown-submenu'> <!-- Submenu -->
57 <a tabindex='-1' href='#'>Gitblit WAR</a>
58 <ul class='dropdown-menu'>
59 <li><a href='setup_war.html'>setup WAR</a></li>
60 <li><a href='upgrade_war.html'>upgrade WAR</a></li>
61 </ul></li> <!-- End Submenu -->
62 <li class='divider'></li>
63 <li class='dropdown-submenu'> <!-- Submenu -->
64 <a tabindex='-1' href='#'>Server Configuration</a>
65 <ul class='dropdown-menu'>
66 <li><a href='administration.html'>administration</a></li>
67 <li><a href='setup_authentication.html'>authentication</a></li>
68 <li><a href='setup_hooks.html'>push hooks</a></li>
69 <li><a href='setup_lucene.html'>lucene indexing</a></li>
70 <li><a href='setup_proxy.html'>reverse proxies</a></li>
71 <li><a href='setup_clientmenus.html'>client app menus</a></li>
72 <li><a href='setup_bugtraq.html'>bugtraq</a></li>
73 <li><a href='setup_mirrors.html'>mirrors</a></li>
74 <li><a href='setup_scaling.html'>scaling</a></li>
75 <li class='divider'></li>
76 <li><a href='setup_viewer.html'>Gitblit as a viewer</a></li>
77 </ul></li> <!-- End Submenu -->
78 <li class='divider'></li>
79 <li class='dropdown-submenu'> <!-- Submenu -->
80 <a tabindex='-1' href='#'>Client Usage</a>
81 <ul class='dropdown-menu'>
82 <li><a href='setup_transport_http.html'>using HTTP/HTTPS</a></li>
83 <li><a href='setup_transport_ssh.html'>using SSH</a></li>
84 <li><a href='eclipse_plugin.html'>using the Eclipse plugin</a></li>
85 </ul></li> <!-- End Submenu -->
86 <li class='divider'></li>
87 <li class='dropdown-submenu'> <!-- Submenu -->
88 <a tabindex='-1' href='#'>Tickets</a>
89 <ul class='dropdown-menu'>
90 <li><a href='tickets_overview.html'>overview</a></li>
91 <li><a href='tickets_using.html'>using</a></li>
92 <li><a href='tickets_barnum.html'>barnum</a></li>
93 <li><a href='tickets_setup.html'>setup</a></li>
94 <li><a href='tickets_replication.html'>replication & advanced administration</a></li>
95 </ul></li> <!-- End Submenu -->
96 <li class='divider'></li>
97 <li class='dropdown-submenu'> <!-- Submenu -->
98 <a tabindex='-1' href='#'>Plugins</a>
99 <ul class='dropdown-menu'>
100 <li><a href='plugins_overview.html'>overview</a></li>
101 <li><a href='plugins_extensions.html'>extension points</a></li>
102 </ul></li> <!-- End Submenu -->
103 <li class='divider'></li>
104 <li><a href='federation.html'>federation</a></li>
105 <li class='divider'></li>
106 <li><a href='properties.html'>settings</a></li>
107 <li><a href='faq.html'>faq</a></li>
108 <li class='divider'></li>
109 <li><a href='design.html'>design</a></li>
110 <li><a href='rpc.html'>rpc</a></li>
111 </ul></li> <!-- End Menu -->
112 <li class='dropdown'> <!-- Menu -->
113 <a class='dropdown-toggle' href='#' data-toggle='dropdown'>releases<b class='caret'></b></a>
114 <ul class='dropdown-menu'>
115 <li><a href='releasenotes.html'>release notes</a></li>
116 <li><a href='releases.html'>release history</a></li>
117 <li class='divider'></li>
118 <li><a href='roadmap.html'>roadmap</a></li>
119 </ul></li> <!-- End Menu -->
120 <li class='dropdown'> <!-- Menu -->
121 <a class='dropdown-toggle' href='#' data-toggle='dropdown'>downloads<b class='caret'></b></a>
122 <ul class='dropdown-menu'>
584328 123 <li><a href='http://dl.bintray.com/gitblit/releases/gitblit-1.6.2.zip'>Gitblit GO (Windows)</a></li>
M 124 <li><a href='http://dl.bintray.com/gitblit/releases/gitblit-1.6.2.tar.gz'>Gitblit GO (Linux/OSX)</a></li>
125 <li><a href='http://dl.bintray.com/gitblit/releases/gitblit-1.6.2.war'>Gitblit WAR</a></li>
48fe87 126 <li class='divider'></li>
M 127 <li><a href='https://registry.hub.docker.com/u/jmoger/gitblit/'>Gitblit GO (Docker)</a></li>
128 <li class='divider'></li>
129 <li><a href='http://plugins.gitblit.com'>Plugins Registry</a></li>
130 <li class='divider'></li>
584328 131 <li><a href='http://dl.bintray.com/gitblit/releases/manager-1.6.2.zip'>Gitblit Manager</a></li>
M 132 <li><a href='http://dl.bintray.com/gitblit/releases/fedclient-1.6.2.zip'>Federation Client</a></li>
48fe87 133 <li class='divider'></li>
584328 134 <li><a href='http://dl.bintray.com/gitblit/releases/gbapi-1.6.2.zip'>API Library</a></li>
48fe87 135 <li class='divider'></li>
M 136 <li><a href='https://bintray.com/gitblit/releases/gitblit'>Bintray (1.4.0+)</a></li>
137 <li><a href='https://code.google.com/p/gitblit/downloads/list?can=1'>GoogleCode (pre-1.4.0)</a></li>
138 <li class='divider'></li>
139 <li><a href='http://gitblit.github.io/gitblit-maven'>Maven Repository</a></li>
140 </ul></li> <!-- End Menu -->
141 <li class='dropdown'> <!-- Menu -->
142 <a class='dropdown-toggle' href='#' data-toggle='dropdown'>links<b class='caret'></b></a>
143 <ul class='dropdown-menu'>
144 <li><a href='https://dev.gitblit.com'>dev.gitblit.com (self-hosted)</a></li>
145 <li class='divider'></li>
146 <li><a href='http://plugins.gitblit.com'>Plugins Registry</a></li>
147 <li class='divider'></li>
148 <li><a href='https://github.com/gitblit/gitblit'>Github</a></li>
149 <li><a href='http://code.google.com/p/gitblit/issues/list'>Issues</a></li>
150 <li><a href='http://groups.google.com/group/gitblit'>Discussion</a></li>
151 <li><a href='https://plus.google.com/114464678392593421684'>Google+</a></li>
152 <li><a href='https://twitter.com/gitblit'>Twitter</a></li>
153 <li><a href='http://www.ohloh.net/p/gitblit'>Ohloh</a></li>
584328 154 <li class='divider'></li>
M 155 <li><a href='https://vimeo.com/86164723'>Gitblit Tickets screencast</a></li>
156 <li><a href='https://asciinema.org/a/9342'>Gitblit SSH and Plugin Management asciicast</a></li>
157 <li><a href='http://episodes.gitminutes.com/2014/05/gitminutes-29-james-moger-on-gitblit.html'>GitMinutes #29: James Moger on Gitblit</a></li>
48fe87 158 <li class='divider'></li>
M 159 <li><a href='https://plus.google.com/+JamesMoger'>+JamesMoger</a></li>
160 <li><a href='https://twitter.com/JamesMoger'>@JamesMoger</a></li>
161 </ul></li> <!-- End Menu -->
162 <li class='divider-vertical'></li>
163 <li><a href='https://plus.google.com/114464678392593421684?prsrc=3' class='gpluspage'><img src='https://ssl.gstatic.com/images/icons/gplus-16.png' width='16' height='16 style='order: 0;'/></a></li><li><div class='gplusone'><g:plusone size='small' href='http://gitblit.com'></g:plusone></div></li>
164                         </ul>
165                     </div><!--/.nav-collapse -->
166                 </div>
167             </div>
168         </div><!-- end Navigation Bar -->
169 <div class='container'>
170 <!-- Begin Markdown -->
171 <h2 class="section" id='H1'><a href="#H1" class="sectionlink"><i class="icon-share-alt"> </i></a>Gitblit Plugins</h2><p><em>SINCE 1.5.0</em></p><p>Gitblit supports extending and enhancing the core functionality through plugins. This mechanism is very young and incomplete with few extension points, but you can expect it to evolve rapidly in upcoming releases.</p>
172 <h3 class="section" id='H2'><a href="#H2" class="sectionlink"><i class="icon-share-alt"> </i></a>What is a plugin?</h3><p>A plugin is a collection of Java classes and required jar dependencies bundled together in a zip file. A plugin may optionally include <em>Extensions</em> which enhance Gitblit at specific Gitblit-specified <em>ExtensionPoints</em>.</p><p><em>Plugins</em> are singleton instances that are <em>STARTED</em> when Gitblit launches and <em>STOPPED</em> when Gitblit terminates. <em>Extensions</em> are dynamic instances that are created when Gitblit processes requests that trigger <em>ExtensionPoints</em>.</p>
173 <h3 class="section" id='H3'><a href="#H3" class="sectionlink"><i class="icon-share-alt"> </i></a>Architecture</h3><p>The existing plugin mechanism is based on <a href="https://github.com/decebals/pf4j">pf4j</a>. Plugins are distributed as zip files and may include their runtime dependencies or may rely on the bundled dependencies of other plugins and/or Gitblit core.</p><p>The plugin zip files are stored in <code>${baseFolder}/plugins</code> and are unpacked on startup into folders of the same name.</p><p>A plugin defines it's metadata in the META-INF/MANIFEST.MF file:</p>
174 <pre><code>Plugin-Id: powertools
175 Plugin-Description: Command and control Gitblit over SSH
176 Plugin-Class: com.gitblit.plugin.powertools.Plugin
177 Plugin-Version: 1.2.0
178 Plugin-Requires: 1.5.0
179 Plugin-Provider: gitblit.com
180 </code></pre><p>In addition to extending Gitblit core, plugins can also define extension points that may be implemented by other plugins. Therefore a plugin may depend on other plugins.</p>
181 <pre><code>Plugin-Dependencies: foo, bar
182 </code></pre><p><strong>NOTE:</strong><br/>The pf4j plugin framework relies on a javac apt processor to generate compile-time extension information, so be sure to enable apt processing in your build process.</p>
183 <h4 class="section" id='H4'><a href="#H4" class="sectionlink"><i class="icon-share-alt"> </i></a>Limitations of Plugin Dependencies</h4><p>Plugins may specify plugin dependencies by their ID, but they may not specify dependency versions.</p>
184 <h3 class="section" id='H5'><a href="#H5" class="sectionlink"><i class="icon-share-alt"> </i></a>Managing Plugins</h3><p>Administrators may manage plugins through the <code>plugin</code> SSH dispatch command:</p>
185 <pre><code>ssh host -l username -p 29418 plugin
186 </code></pre><p>Through this command interface plugins can be started, stopped, disabled, enabled, installed, uninstalled, listed, etc. Each command is supports the <code>--help</code> argument which will guide you in understanding the options and usage of the command.</p><p>You may watch an Asciinema screencast of how to use the SSH transport and the plugin manager <a href="https://asciinema.org/a/9342">here</a>.</p>
187 <h3 class="section" id='H6'><a href="#H6" class="sectionlink"><i class="icon-share-alt"> </i></a>Default Plugin Registry</h3><p>Gitblit provides a simple default registry of plugins. The registry is a JSON file and it lists plugin metadata and download locations.</p>
188 <pre><code>plugins.registry = http://plugins.gitblit.com/plugins.json
189 </code></pre><p>The <a href="http://plugins.gitblit.com">default plugins registry</a> is currently hosted in a <a href="https://github.com/gitblit/gitblit-registry">Git repository on Github</a>. You can view the default registry file <a href="http://plugins.gitblit.com/plugins.json">here</a>. The default plugin registry is also a Maven-2 compatible repository.</p>
190 <h3 class="section" id='H7'><a href="#H7" class="sectionlink"><i class="icon-share-alt"> </i></a>Contributing Plugins to the Default Registry</h3><p>If you develop your own plugins that you want hosted by or linked in the default registry, open a pull request for the registry repository. Any contributed binaries hosted in this repository must have Maven metadata and the SHA-1 &amp; MD5 checksums. By default, Gitblit enforces checksum validation on all downloads.</p>
191 <h3 class="section" id='H8'><a href="#H8" class="sectionlink"><i class="icon-share-alt"> </i></a>Hosting your Own Registry / Allowing Multiple Registries</h3><p>The <code>plugins.json</code> file is parameterized with the <code>${self}</code> placeholder. This parameter is substituted on download with with the source URL of the registry file. This allows you to clone and serve your own copy of this git repository or just serve your own <code>plugins.json</code> on your own network.</p><p>Gitblit also supports loading multiple plugin registries. Just place another <strong>properly formatted</strong> <code>.json</code> file in <code>${baseFolder}/plugins</code> and Gitblit will load that as an additional registry.
192 <!-- End Markdown -->
584328 193 <div ><ul class="pager"> <li class="next"><a href="plugins_extensions.html">extension points &rarr;</a></li></ul></div><footer class="footer"><p class="pull-right">generated 2014-10-28</p>
48fe87 194 <p>The content of this page is licensed under the <a href="http://creativecommons.org/licenses/by/3.0">Creative Commons Attribution 3.0 License</a>.</p>
M 195 </footer>
196 </div>
197 <!-- Google Analytics -->
198 <script type="text/javascript">
199     var _gaq = _gaq || [];
200     _gaq.push(['_setAccount', 'UA-24377072-1']);
201     _gaq.push(['_trackPageview']);
202
203     (function() {
204         var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
205         ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
206         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
207     })();
208 </script>
209
210 </body>
211 </html>