felix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Felix: Apache Felix Maven SCR Plugin (page edited)
Date Thu, 02 Jul 2009 13:01:00 GMT
<html>
<head>
    <base href="http://cwiki.apache.org/confluence" />
    <style type="text/css">
    <!--
    body, p, td, table, tr, .bodytext, .stepfield {
	font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	color: #000000;
	font-weight: normal;
}
#PageContent {
	text-align: left;
	background-color: #fff;
	padding: 0px;
	margin: 0px;
    padding-bottom:20px;
}
/*
** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area, we can't
** use an id=PageContent or class=wiki-content, so we must
** set the body style to that used for PageContent, and p to that used for wiki-content.
*/

body {
	margin: 0px;
	padding: 0px;
	text-align: center;
    background-color: #f0f0f0;
}

@media print {

body {
    background-color: #fff;
}

}

.monospaceInput {
    font:12px monospace
}

.wiki-content p, .commentblock p {
    margin: 16px 0px 16px 0px;
    padding: 0px;
}

.wiki-content-preview {
    padding: 5px;
    border-left: 1px solid #3c78b5;
    border-right: 1px solid #3c78b5;
}

ul, ol {
    margin-top: 2px;
    margin-bottom: 2px;
    padding-top: 0px;
    padding-bottom: 0px;
}

pre {
    padding: 0px;
    margin-top: 5px;
    margin-left: 15px;
    margin-bottom: 5px;
    margin-right: 5px;
    text-align: left;
}

.helpheading {
    font-weight: bold;
    background-color: #D0D9BD;
        border-bottom: 1px solid #3c78b5;
        padding: 4px 4px 4px 4px;
        margin: 0px;
        margin-top: 10px;
}
.helpcontent {
        padding: 4px 4px 20px 4px;
    background-color: #f5f7f1;
}

.code {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.focusedComment {
    background: #ffffce;
}

.commentBox, .focusedComment {
    padding: 10px;
    margin: 5px 0 5px 0;
    border: 1px #bbb solid;
}

.codeHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.codeContent {
    text-align: left;
    background-color: #f0f0f0;
    padding: 3px;
}

.preformatted {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.preformattedHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.preformattedContent {
    background-color: #f0f0f0;
    padding: 3px;
}

.panel {
 	border: 1px dashed #3c78b5;
    margin: 10px;
    margin-top: 0px;
}

.panelHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.panelContent {
    background-color: #f0f0f0;
    padding: 5px;
}

.anonymousAlert {
    background-color: #f0f0f0;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}

.lockAlert {
    background-color: #f0f0f0;
    width: 50%;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}


.code-keyword {
  color: #000091;
  background-color: inherit;
}

.code-object {
  color: #910091;
  background-color: inherit;
}

.code-quote {
  color: #009100;
  background-color: inherit;
}

.code-comment {
  color: #808080;
  background-color: inherit;
}


.code-xml .code-keyword {
  color: inherit;
  font-weight: bold;
}

.code-tag {
  color: #000091;
  background-color: inherit;
}

.breadcrumbs {
    background-color: #f0f0f0;
 	border-color: #3c78b5;
	border-width: 1px 0px 1px 0px;
	border-style: solid;
    font-size: 11px;
    padding: 3px 0px 3px 0px;
}

.navmenu {
    border: 1px solid #ccc;
}

.menuheading {
    font-weight: bold;
    background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 2px 4px;
}

.menuitems {
	padding: 4px 4px 20px 4px;
}

.rightpanel {
    border-left: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}

#helpheading {
    text-align: left;
    font-weight: bold;
    background-color: #D0D9BD;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 4px 4px;
	margin: 0px;
}
#helpcontent {
	padding: 4px 4px 4px 4px;
    background-color: #f5f7f1;
}
.helptab-unselected {
    font-weight: bold;
	padding: 5px;
    background-color: #f5f7f1;
}
.helptab-selected {
    font-weight: bold;
    background-color: #D0D9BD;
	padding: 5px;
}
.helptabs {
    margin: 0px;
    background-color: #f5f7f1;
	padding: 5px;
}
.infopanel-heading {
    font-weight: bold;
	padding: 4px 0px 2px 0px;
}

.pagebody {
}

.pageheader {
	padding: 5px 5px 5px 0px;
 	border-bottom: 1px solid #3c78b5;
}

.pagetitle {
	font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.newpagetitle {
    color: #ccc !important;
}

.steptitle {
	font-size: 18px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
	margin-bottom: 7px;
}

.substeptitle {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
    margin: 2px 4px 4px 4px;
    padding: 2px 4px 1px 4px;
}

.stepdesc {
    font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	font-weight: normal;
    color: #666666;
    margin-top: 7px;
    margin-bottom: 7px;
}

.steplabel {
    font-weight: bold;
    margin-right: 4px;
    color: black;
    float: left;
    width: 15%;
    text-align: right;
}

.stepfield {
    background: #f0f0f0;
    padding: 5px;
}

.submitButtons{
    margin-top:5px;
    text-align:right;
}

.formtitle {
	font-size: 12px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.sectionbottom {
    border-bottom: 1px solid #3c78b5;
}

.topRow {
    border-top: 2px solid #3c78b5;
}

.tabletitle {
	font-size: 14px;
	font-weight: bold;
	font-family: Arial, sans-serif;
    padding: 3px 0px 2px 0px;
    margin: 8px 4px 2px 0px;
	color: #003366;
	border-bottom: 2px solid #3c78b5;
}
.pagesubheading {
    color: #666666;
    font-size: 10px;
    padding: 0px 0px 5px 0px;
}

HR {
	color: 3c78b5;
	height: 1;
}

A:link, A:visited, A:active, A:hover {
	color: #003366;
}

h1 A:link, h1 A:visited, h1 A:active {
	text-decoration: none;
}

h1 A:hover {
    border-bottom: 1px dotted #003366;
}

.wiki-content > :first-child, .commentblock > :first-child {
    margin-top: 3px;
}

.logocell {
    padding: 10px;
}

input {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #000000;
}

textarea, textarea.editor {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #333333;
}

/* use logoSpaceLink instead.
.spacenametitle {
	font: 21px/31px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle img {
  margin: 0 0 -4px 0;
}
.spacenametitle a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle a:visited {
    text-decoration: none;
    color: #999999;
}*/

.spacenametitle-printable {
	font: 20px/25px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle-printable a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle-printable a:visited {
    text-decoration: none;
    color: #999999;
}

.blogDate {
	font-weight: bold;
	text-decoration: none;
	color: black;
}

.blogSurtitle {
    background: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.blogHeading {
    font-size: 20px;
    line-height: normal;
    font-weight: bold;
    padding: 0px;
    margin: 0px;
}

.blogHeading a {
   text-decoration: none;
   color: black;
}

.endsection {
	align: right;
	color: #666666;
	margin-top: 10px;
}
.endsectionleftnav {
	align: right;
	color: #666666;
	margin-top: 10px;
}

h1 {
	font-size: 24px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	color: #003366;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 36px 0px 4px 0px;
}

h2 {
	font-size: 18px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 27px 0px 4px 0px;
}

h3 {
	font-size: 14px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 21px 0px 4px 0px;
}

h4 {
	font-size: 12px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 18px 0px 4px 0px;
}

h4.search {
	font-size: 12px;
	line-height: normal;
	font-weight: normal;
	background-color: #f0f0f0;
	padding: 4px;
	margin: 18px 0px 4px 0px;
}

h5 {
	font-size: 10px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

h6 {
	font-size: 8px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

.smallfont {
    font-size: 10px;
}
.descfont {
    font-size: 10px;
    color: #666666;
}
.smallerfont {
    font-size: 9px;
}
.smalltext {
    color: #666666;
    font-size: 10px;
}
.smalltext a {
    color: #666666;
}
.smalltext-blue {
    color: #3c78b5;
    font-size: 10px;
}
.surtitle {
    margin-left: 1px;
    margin-bottom: 5px;
    font-size: 14px;
    color: #666666;
}

/* css hack found here:  http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/css/hacks/ */
.navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inherit; cursor: pointer;}
.navItemOver a { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:visited { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:hover { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; }
.navItem a { color: #ffffff; text-decoration: none; }
.navItem a:hover { color: #ffffff; text-decoration: none; }
.navItem a:visited { color: #ffffff; text-decoration: none; }

div.padded { padding: 4px; }
div.thickPadded { padding: 10px; }
h3.macrolibrariestitle {
    margin: 0px 0px 0px 0px;
}

div.centered { text-align: center; margin: 10px; }
div.centered table {margin: 0px auto; text-align: left; }

.tableview table {
    margin: 0;
}

.tableview th {
    text-align: left;
    color: #003366;
    font-size: 12px;
    padding: 5px 0px 0px 5px;
    border-bottom: 2px solid #3c78b5;
}
.tableview td {
    text-align: left;
    border-color: #ccc;
    border-width: 0px 0px 1px 0px;
    border-style: solid;
    margin: 0;
    padding: 4px 10px 4px 5px;
}

.grid {
    margin: 2px 0px 5px 0px;
    border-collapse: collapse;
}
.grid th  {
    border: 1px solid #ccc;
    padding: 2px 4px 2px 4px;
    background: #f0f0f0;
    text-align: center;
}
.grid td  {
    border: 1px solid #ccc;
    padding: 3px 4px 3px 4px;
}
.gridHover {
	background-color: #f9f9f9;
}

td.infocell {
    background-color: #f0f0f0;
}
.label {
	font-weight: bold;
	color: #003366;
}

label {
	font-weight: bold;
	color: #003366;
}

.error {
	background-color: #fcc;
}

.errorBox {
	background-color: #fcc;
    border: 1px solid #c00;
    padding: 5px;
    margin: 5px;
}

.errorMessage {
	color: #c00;
}

.success {
	background-color: #dfd;
}

.successBox {
	background-color: #dfd;
    border: 1px solid #090;
    padding: 5px;
    margin-top:5px;
    margin-bottom:5px;
}

blockquote {
	padding-left: 10px;
	padding-right: 10px;
	margin-left: 5px;
	margin-right: 0px;
	border-left: 1px solid #3c78b5;
}

table.confluenceTable
{
    margin: 5px;
    border-collapse: collapse;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

DIV.small {
	font-size: 9px;
}

H1.pagename {
	margin-top: 0px;
}

IMG.inline  {}

.loginform {
    margin: 5px;
    border: 1px solid #ccc;
}

/* The text how the "This is a preview" comment should be shown. */
.previewnote { text-align: center;
                font-size: 11px;
                    color: red; }

/* How the preview content should be shown */
.previewcontent { background: #E0E0E0; }

/* How the system messages should be shown (DisplayMessage.jsp) */
.messagecontent { background: #E0E0E0; }

/* How the "This page has been modified..." -comment should be shown. */
.conflictnote { }

.createlink {
    color: maroon;
}
a.createlink {
    color: maroon;
}
.templateparameter {
    font-size: 9px;
    color: darkblue;
}

.diffadded {
    background: #ddffdd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkgreen;
}
.diffdeleted {
    color: #999;
    background: #ffdddd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkred;
}
.diffnochange {
    padding: 1px 1px 1px 4px;
	border-left: 4px solid lightgrey;
}
.differror {
    background: brown;
}
.diff {
    font-family: lucida console, courier new, fixed-width;
	font-size: 12px;
	line-height: 14px;
}
.diffaddedchars {
    background-color:#99ff99;
    font-weight:bolder;
}
.diffremovedchars {
    background-color:#ff9999;
    text-decoration: line-through;
    font-weight:bolder;
}

.greybackground {
    background: #f0f0f0
}

.greybox {
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.borderedGreyBox {
    border: 1px solid #cccccc;
    background-color: #f0f0f0;
    padding: 10px;
}

.greyboxfilled {
 	border: 1px solid #ddd;
    background: #f0f0f0;
    padding: 3px;
	margin: 1px 1px 10px 1px;
}

.navBackgroundBox {
    padding: 5px 5px 5px 5px;
    font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: white;
    background: #3c78b5;
    text-decoration: none;
}

.previewBoxTop {
	background-color: #f0f0f0;
    border-width: 1px 1px 0px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 5px 0px 0px 0px;
    text-align: center;
}
.previewContent {
    background-color: #fff;
 	border-color: #3c78b5;
	border-width: 0px 1px 0px 1px;
	border-style: solid;
	padding: 10px;
	margin: 0px;
}
.previewBoxBottom {
	background-color: #f0f0f0;
    border-width: 0px 1px 1px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 0px 0px 5px 0px;
    text-align: center;
}

.functionbox {
    background-color: #f0f0f0;
 	border: 1px solid #3c78b5;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.functionbox-greyborder {
    background-color: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.search-highlight {
    background-color: #ffffcc;
}

/* normal (white) background */
.rowNormal {
    background-color: #ffffff;
 }

/* alternate (pale yellow) background */
.rowAlternate {
    background-color: #f7f7f7;
}

/* used in the list attachments table */
.rowAlternateNoBottomColor {
    background-color: #f7f7f7;
}

.rowAlternateNoBottomNoColor {
}

.rowAlternateNoBottomColor td {
    border-bottom: 0px;
}

.rowAlternateNoBottomNoColor td {
    border-bottom: 0px;
}

/* row highlight (grey) background */
.rowHighlight {
    background-color: #f0f0f0;

}

TD.greenbar {FONT-SIZE: 2px; BACKGROUND: #00df00; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.redbar {FONT-SIZE: 2px; BACKGROUND: #df0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.darkredbar {FONT-SIZE: 2px; BACKGROUND: #af0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }

TR.testpassed {FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING: 0px; }
TR.testfailed {FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING: 0px; }

.toolbar  {
    margin: 0px;
    border-collapse: collapse;
}

.toolbar td  {
    border: 1px solid #ccc;
    padding: 2px 2px 2px 2px;
    color: #ccc;
}

td.noformatting {
    border-width: 0px;
    border-style: none;
    text-align: center;
	padding: 0px;
}

.commentblock {
    margin: 12px 0 12px 0;
}

/*
 * Divs displaying the license information, if necessary.
 */
.license-eval, .license-none, .license-nonprofit {
    border-top: 1px solid #bbbbbb;
    text-align: center;
    font-size: 10px;
    font-family: Verdana, Arial, Helvetica, sans-serif;
}

.license-eval, .license-none {
    background-color: #ffcccc;
}

.license-eval b, .license-none b {
    color: #990000
}

.license-nonprofit {
    background-color: #ffffff;
}

/*
 * The shadow at the bottom of the page between the main content and the
 * "powered by" section.
 */
.bottomshadow {
    height: 12px;
    background-image: url("$req.contextPath/images/border/border_bottom.gif");
    background-repeat: repeat-x;
}

/*
 * Styling of the operations box
 */
.navmenu .operations li, .navmenu .operations ul {
    list-style: none;
    margin-left: 0;
    padding-left: 0;
}

.navmenu .operations ul {
    margin-bottom: 9px;
}

.navmenu .label {
    font-weight: inherit;
}

/*
 * Styling of ops as a toolbar
 */
.toolbar div {
    display: none;
}

.toolbar .label {
    display: none;
}

.toolbar .operations {
    display: block;
}

.toolbar .operations ul {
    display: inline;
    list-style: none;
    margin-left: 10px;
    padding-left: 0;
}

.toolbar .operations li {
    list-style: none;
    display: inline;
}

/* list page navigational tabs */
#foldertab {
padding: 3px 0px 3px 8px;
margin-left: 0;
border-bottom: 1px solid #3c78b5;
font: bold 11px Verdana, sans-serif;
}

#foldertab li {
list-style: none;
margin: 0;
display: inline;
}

#foldertab li a {
padding: 3px 0.5em;
margin-left: 3px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
text-decoration: none;
}

#foldertab li a:link { color: #ffffff; }
#foldertab li a:visited { color: #ffffff; }

#foldertab li a:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

#foldertab li a.current {
background: white;
border-bottom: 1px solid white;
color: black;
}

#foldertab li a.current:link { color: black; }
#foldertab li a.current:visited { color: black; }
#foldertab li a.current:hover {
background: white;
border-bottom: 1px solid white;
color: black;
}

/* alphabet list */
ul#squaretab {
margin-left: 0;
padding-left: 0;
white-space: nowrap;
font: bold 8px Verdana, sans-serif;
}

#squaretab li {
display: inline;
list-style-type: none;
}

#squaretab a {
padding: 2px 6px;
border: 1px solid #3c78b5;
}

#squaretab a:link, #squaretab a:visited {
color: #fff;
background-color: #3c78b5;
text-decoration: none;
}

#squaretab a:hover {
color: #ffffff;
background-color: #003366;
border-color: #003366;
text-decoration: none;
}

#squaretab li a#current {
background: white;
color: black;
}

.blogcalendar * {
    font-family:verdana, arial, sans-serif;
    font-size:x-small;
    font-weight:normal;
    line-height:140%;
    padding:2px;
}


table.blogcalendar {
    border: 1px solid #3c78b5;
}

.blogcalendar th.calendarhead, a.calendarhead {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    text-transform:uppercase;
    background-color: #3c78b5;
    color: #ffffff;
    letter-spacing: .3em;
    text-transform: uppercase;
}

.calendarhead:visited {color: white;}
.calendarhead:active {color: white;}
.calendarhead:hover {color: white;}

.blogcalendar th {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    background-color:#f0f0f0;
}

.blogcalendar td {
    font-size:x-small;
    font-weight:normal;
}

.searchGroup { padding: 0 0 10px 0; background: #f0f0f0; }
.searchGroupHeading { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; padding: 2px 4px 1px 4px; }
.searchItem { padding: 1px 4px 1px 4px; }
.searchItemSelected { padding: 1px 4px 1px 4px; font-weight: bold; background: #ddd; }

/* permissions page styles */
.permissionHeading {
    border-bottom: #bbb; border-width: 0 0 1px 0; border-style: solid; font-size: 16px; text-align: left;
}
.permissionTab {
    border-width: 0 0 0 1px; border-style: solid; background: #3c78b5; color: #ffffff; font-size: 10px;
}
.permissionSuperTab {
    border-width: 0 0 0 1px; border-style: solid; background: #003366; color: #ffffff;
}
.permissionCell {
    border-left: #bbb; border-width: 0 0 0 1px; border-style: solid;
}

/* warning panel */
.warningPanel { background: #FFFFCE; border:#F0C000 1px solid; padding: 8px; margin: 10px; }
/* alert panel */
.alertPanel { background: #FFCCCC; border:#C00 1px solid; padding: 8px; margin: 10px; }
/* info panel */
.infoPanel { background: #D8E4F1; border:#3c78b5 1px solid; padding: 8px; margin: 10px; }

/* side menu highlighting (e.g. space content screen) */
.optionPadded { padding: 2px; }
.optionSelected { background-color: #ffffcc; padding: 2px; border: 1px solid #ddd; margin: -1px; }
.optionSelected a { font-weight: bold; text-decoration: none; color: black; }

/* information macros */
.noteMacro { border-style: solid; border-width: 1px; border-color: #F0C000; background-color: #FFFFCE; text-align:left; margin-top: 5px; margin-bottom: 5px}
.warningMacro { border-style: solid; border-width: 1px; border-color: #c00; background-color: #fcc; text-align:left; margin-top: 5px; margin-bottom: 5px}
.infoMacro { border-style: solid; border-width: 1px; border-color: #3c78b5; background-color: #D8E4F1; text-align:left; margin-top: 5px; margin-bottom: 5px}
.tipMacro { border-style: solid; border-width: 1px; border-color: #090; background-color: #dfd; text-align:left; margin-top: 5px; margin-bottom: 5px}
.informationMacroPadding { padding: 5px 0 0 5px; }

table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
    border: none;
}

table.sectionMacroWithBorder td.columnMacro { border-style: dashed; border-width: 1px; border-color: #cccccc;}

.pagecontent
{
    padding: 10px;
    text-align: left;
}

/* styles for links in the top bar */
.topBarDiv a:link {color: #ffffff;}
.topBarDiv a:visited {color: #ffffff;}
.topBarDiv a:active {color: #ffffff;}
.topBarDiv a:hover {color: #ffffff;}
.topBarDiv {color: #ffffff;}

.topBar {
    background-color: #003366;
}


/* styles for extended operations */
.greyLinks a:link {color: #666666; text-decoration:underline;}
.greyLinks a:visited {color: #666666; text-decoration:underline;}
.greyLinks a:active {color: #666666; text-decoration:underline;}
.greyLinks a:hover {color: #666666; text-decoration:underline;}
.greyLinks {color: #666666; display:block; padding: 10px}

.logoSpaceLink {color: #999999; text-decoration: none}
.logoSpaceLink a:link {color: #999999; text-decoration: none}
.logoSpaceLink a:visited {color: #999999; text-decoration: none}
.logoSpaceLink a:active {color: #999999; text-decoration: none}
.logoSpaceLink a:hover {color: #003366; text-decoration: none}

/* basic panel (basicpanel.vmd) style */
.basicPanelContainer {border: 1px solid #3c78b5; margin-top: 2px; margin-bottom: 8px; width: 100%}
.basicPanelTitle {padding: 5px; margin: 0px; background-color: #f0f0f0; color: black; font-weight: bold;}
.basicPanelBody {padding: 5px; margin: 0px}

.separatorLinks a:link {color: white}
.separatorLinks a:visited {color: white}
.separatorLinks a:active {color: white}

.greynavbar {background-color: #f0f0f0; border-top: 1px solid #3c78b5; margin-top: 2px}

div.headerField {
    float: left;
    width: auto;
    height: 100%;
}

.headerFloat {
    margin-left: auto;
    width: 50%;
}

.headerFloatLeft {
    float: left;
    margin-right: 20px;
    margin-bottom: 10px;
}

#headerRow {
    padding: 10px;
}

div.license-personal {
   background-color: #003366;
   color: #ffffff;
}

div.license-personal a {
   color: #ffffff;
}

.greyFormBox {
    border: 1px solid #cccccc;
    padding: 5px;
}

/* IE automatically adds a margin before and after form tags. Use this style to remove that */
.marginlessForm {
    margin: 0px;
}

.openPageHighlight {
    background-color: #ffffcc;
    padding: 2px;
    border: 1px solid #ddd;
}

.editPageInsertLinks, .editPageInsertLinks a
{
    color: #666666;
    font-weight: bold;
    font-size: 10px;
}

/* Style for label heatmap. */
.top10 a {
    font-weight: bold;
    font-size: 2em;
    color: #003366;
}
.top25 a {
    font-weight: bold;
    font-size: 1.6em;
    color: #003366;
}
.top50 a {
    font-size: 1.4em;
    color: #003366;
}
.top100 a {
    font-size: 1.2em;
    color: #003366;
}

.heatmap {
    list-style:none;
    width: 95%;
    margin: 0px auto;
}

.heatmap a {
    text-decoration:none;
}

.heatmap a:hover {
    text-decoration:underline;
}

.heatmap li {
    display: inline;
}

.minitab {
padding: 3px 0px 3px 8px;
margin-left: 0;
margin-top: 1px;
margin-bottom: 0px;
border-bottom: 1px solid #3c78b5;
font: bold 9px Verdana, sans-serif;
text-decoration: none;
float:none;
}
.selectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
background: white;
border-bottom: 1px solid white;
color: #000000;
text-decoration: none;
}
.unselectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
color: #ffffff;
text-decoration: none;
}

a.unselectedminitab:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

a.unselectedminitab:link { color: white; }
a.unselectedminitab:visited { color: white; }

a.selectedminitab:link { color: black; }
a.selectedminitab:visited { color: black; }

.linkerror { background-color: #fcc;}

a.labelOperationLink:link {text-decoration: underline}
a.labelOperationLink:active {text-decoration: underline}
a.labelOperationLink:visited {text-decoration: underline}
a.labelOperationLink:hover {text-decoration: underline}

a.newLabel:link {background-color: #ddffdd}
a.newLabel:active {background-color: #ddffdd}
a.newLabel:visited {background-color: #ddffdd}
a.newLabel:hover {background-color: #ddffdd}

ul.square {list-style-type: square}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
}


.inline-control-link a:link {text-decoration: none}
.inline-control-link a:active {text-decoration: none}
.inline-control-link a:visited {text-decoration: none}
.inline-control-link a:hover {text-decoration: none}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
}

div.auto_complete {
    width: 350px;
    background: #fff;
}
div.auto_complete ul {
    border: 1px solid #888;
    margin: 0;
    padding: 0;
    width: 100%;
    list-style-type: none;
}
div.auto_complete ul li {
    margin: 0;
    padding: 3px;
}
div.auto_complete ul li.selected {
    background-color: #ffb;
}
div.auto_complete ul strong.highlight {
    color: #800;
    margin: 0;
    padding: 0;
}

/******* Edit Page Styles *******/
.toogleFormDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    padding:5px;
    margin-top: 5px;
}

.toogleInfoDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    display:none;
    padding:5px;
    margin-top: 10px;
}

.inputSection{
    margin-bottom:20px;
}

#editBox{
   border:1px solid lightgray;
   background-color:#F0F0F0;
}

/******* Left Navigation Theme Styles ********/
.leftnav li a {
    text-decoration:none;
    color:white;
    margin:0px;
    display:block;
    padding:2px;
    padding-left:5px;
    background-color: #3c78b5;
    border-top:1px solid #3c78b5;
}

.leftnav li a:active {color:white;}
.leftnav li a:visited {color:white;}
.leftnav li a:hover {background-color: #003366; color:white;}

/* Added by Shaun during i18n */
.replaced
{
    background-color: #33CC66;
}

.topPadding
{
    margin-top: 20px;
}

/* new form style */
.form-block {
    padding: 6px;
}
.form-error-block {
    padding: 6px;
    background: #fcc;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-element-large {
    font-size: 16px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-element-small {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-header {
    background: lightyellow;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-header p, .form-block p, .form-error-block p {
    line-height: normal;
    margin: 12px 0 12px 0;
}
.form-example {
    color: #888;
    font-size: 11px;
}
.form-divider {
    border-bottom: #ccc 1px solid;
    margin-bottom: 6px;
}
.form-buttons {
    margin-top: 6px;
    border-top: #ccc 1px solid;
    border-bottom: #ccc 1px solid;
    background: #f0f0f0;
    padding: 10px;
    text-align: center;
}
.form-buttons input {
    width: 100px;
}
.form-block .error {
    padding: 6px;
    margin-bottom: 6px;
}
    -->
    </style>
</head>
<body>

<div id="PageContent">
<table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%"><tr>
<td valign="top" class="pagebody">

    <div class="pageheader">
        <span class="pagetitle">
            Page Edited :
            <a href="http://cwiki.apache.org/confluence/display/FELIX">FELIX</a> :
            <a href="http://cwiki.apache.org/confluence/display/FELIX/Apache+Felix+Maven+SCR+Plugin">Apache Felix Maven SCR Plugin</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/FELIX/Apache+Felix+Maven+SCR+Plugin">Apache Felix Maven SCR Plugin</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~cziegeler@apache.org">Carsten Ziegeler</a>
            <span class="smallfont">(Jul 02, 2009)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=63098&originalVersion=18&revisedVersion=19">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><p>The Apache Felix Maven SCR Plugin is a great tool to ease the development of OSGi components and services. Components and services are defined through annotations and the plugin creates the necessary descriptors for the OSGi Declarative Services, Config Admin and Metatype services.</p>

<h2><a name="ApacheFelixMavenSCRPlugin-Introduction"></a>Introduction</h2>

<p>In OSGi based systems functionality is mainly provided through services. Unlike traditional systems but comparable to Spring, a service is not reqiured to implement a framework defined interface. Instead services implement one or more interfaces, which stipulate the type of service provided. It is the lifetime of the bundle, which defines the lifetime of the service: A service object may be instantiated when the bundle is started and will automatically be removed when the bundle is stopped (and the service has not already been unregistered).</p>

<p>Usually, the functionality of a bundle - be it the packages exported or be it the services provided - is made available to the rest of the system, when the bundle is started. To give the bundle a change to take action, a bundle may declare a <tt>BundleActivator</tt> class in the <tt>Bundle-Activato</tt> manifest header of the bundle. When the bundle is started, the <tt>start(BundleContext)</tt> method is called, while the <tt>stop(BundleContext)</tt> method is called when the bundle is stopped. These methods are one place to instantiate and register services with the service registry.</p>

<p>The drawback of this method of service registration is that the services have to acquire other services whose functionality is used themselves and also have to observe the presence as services may come and go at any time. Though this observation is rather easy as basically a <tt>ServiceListener</tt> is to be implemented which listens for service registration and unregistration events, this is somewhat tedious and repeating for each service using other services.</p>

<p>To overcome this situation, the OSGi Service Platform Compendium Specification provides the <em>Declarative Services Specification</em>. This specification enables the declaration of services in configuration files, which are read by the <em>Declarative Services Runtime</em> to observe dependencies and activate (register) and deactivate (unregister) services depending on whether requirements can be met. Additionally, the dependencies may be supplied through declared methods. The specification calls a class declared this way a component. A component may or may not be a service registered with the service registry.</p>

<p>Components are declared using XML configuration files contained in the respective bundle and listed in the <tt>Service-Component</tt> bundle manifest header. These configuration files may be handwritten and registered. To support automatic generation of the component descriptors, the Maven SCR Plugin helps in the generation of these files by means of JavaDoc tags embedded in the Java source code of the components.</p>

<p>Related to declarative services is configuration support. To support configuration of services and components, OSGi provides the Configuration Admin Service Specification. This specification defines a service, which is the center of providing configuration to services and components. As such the Configuration Admin Service cares for storing configuration and deliver the configuration automatically or on-demand to clients. Configuration objects are identified by so-called Persistent Identifiers (PID) and are bound to bundles when used. For services implementing the special <tt>ManagedService</tt> or <tt>ManagedServiceFactory</tt> interfaces the PID has to be provided in the service properties as a property with the name <tt>service.pid</tt>. For Declarative Services, the name of the component is used as the PID to retrieve the configuration from the Configuration Admin Service.</p>

<p>The Configuration Admin Service not only allows components to get or retrieve configuration, it also provides the entry point for Management Agents to retrieve and update configuration data. To help building Management Agents the OSGi Metatype Service Specification defines a descripton model which may be used to describe data used by components and services. The configuration properties and meta type description for a given PID together are used to build the user interface to configure the service and/or component.</p>

<p>To summarize:</p>
<ol>
	<li><em>Declarative Services</em> provides a means to define components (and services) through one or more XML files. Each component may get default configuration from its own definition.</li>
	<li>The <em>Configuration Admin Service</em> provides functionality to provide configuration to components and services as well as to support management tools to update (and create) configuration data.</li>
	<li>The <em>Metatype Service</em> provides a description suitable for management tools to manage configurations provided by the Configuration Admin Service. The descriptions of the data is provided in one or more XML files and associated languag binding files.</li>
</ol>


<h2><a name="ApacheFelixMavenSCRPlugin-MavenSCRPlugin"></a>Maven SCR Plugin</h2>


<h3><a name="ApacheFelixMavenSCRPlugin-Use"></a>Use</h3>

<p>Support for automatic generation of the compenent and metadata descriptors is embeded in the <tt>org.apache.felix:maven-scr-plugin</tt> plugin. To use this plugin, it has to be declared in the project descriptor as a <tt>&lt;plugin&gt;</tt> element:</p>
<div class="preformatted"><div class="preformattedContent">
<pre>&lt;project&gt;
  ...
  &lt;build&gt;
    ...
    &lt;plugins&gt;
      ...
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
        &lt;artifactId&gt;maven-scr-plugin&lt;/artifactId&gt;
        &lt;executions&gt;
          &lt;execution&gt;
            &lt;id&gt;generate-scr-scrdescriptor&lt;/id&gt;
            &lt;goals&gt;
              &lt;goal&gt;scr&lt;/goal&gt;
            &lt;/goals&gt;
          &lt;/execution&gt;
        &lt;/executions&gt;
      &lt;/plugin&gt;
      ...
    &lt;/plugins&gt;
    ...
  &lt;/build&gt;
  ...
&lt;/project&gt;
</pre>
</div></div>
<p>The <tt>scr</tt> goal is bound to the <tt>generate-resources</tt> phase and will generate a single descriptor file as well as meta type file for all components found in the project.</p>

<p>The plugin may be configured with the following properties:</p>
<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <b>Property</b> </td>
<td class='confluenceTd'> <b>Description</b> </td>
</tr>
<tr>
<td class='confluenceTd'> <tt>generateAccessors</tt> </td>
<td class='confluenceTd'> If this switch is turned on, the bind and unbind methods for unary references are automatically generated by the plugin. By default this is set to <tt>true</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> <tt>parseJavadoc</tt> </td>
<td class='confluenceTd'> If this switch is turned on, the java source code and its javadoc tags are scanned for the scr tags (see below). The default value is <tt>true</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> <tt>processAnnotations</tt> </td>
<td class='confluenceTd'> If this switch is turned on, the java code is scanned for the scr annotations (see below). The default value is <tt>true</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> <tt>sourceExcludes</tt> </td>
<td class='confluenceTd'> Comma separated list of classes to exclude when processing the source. </td>
</tr>
<tr>
<td class='confluenceTd'> <tt>strictMode</tt> </td>
<td class='confluenceTd'> The plugin distinguishes between errors and warnings. In strict mode warnings are treated as errors and cause the plugin to fail. The default value is <tt>false</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> <tt>properties</tt> </td>
<td class='confluenceTd'> A map of predefined properties. These properties are set to each component (if the component does not define the property already). </td>
</tr>
<tr>
<td class='confluenceTd'> <tt>finalName</tt> </td>
<td class='confluenceTd'> The name of the descriptor file to create. This property defaults to the value of the <tt>scr.descriptor.name</tt> property if defined. Otherwise the default is <tt>serviceComponents.xml</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> <tt>metaTypeName</tt> </td>
<td class='confluenceTd'> The name of the descriptor file to create. This property defauls to <tt>metatype.xml</tt>. </td>
</tr>
</tbody></table>
<p>The meta type file is generated in the <tt>OSGI-INF/metatype/</tt> directory and the scr descriptor file in the <tt>OSGI-INF</tt> directory.</p>

<p><em>Note</em>: The location of the meta type descriptor may not be changed as the OSGi Metatype Service Specification prescribes the location of the descriptors.</p>

<p>The plugin will look for component definition tags in all Java files found in the source directories of the project.</p>

<h3><a name="ApacheFelixMavenSCRPlugin-Usingthedescriptor"></a>Using the descriptor</h3>

<p>Currently the <tt>maven-scr-plugin</tt> only creates the component descriptor file. Adding the descriptor to the bundle and setting the <tt>Service-Component</tt> manifest header accordingly is a different task. However, if you're using the <tt>org.apache.felix:maven-bundle-plugin</tt> to construct the bundle and its manifest, then the <tt>maven-scr-plugin</tt> will add the following settings automatically for the <tt>org.apache.felix:maven-bundle-plugin</tt> (given default <tt>maven-scr-plugin</tt> configuration), so you don't have to configure this yourself:</p>
<div class="preformatted"><div class="preformattedContent">
<pre>...
&lt;Include-Resource&gt;
    src/main/resources,
    target/scr-plugin-generated
&lt;/Include-Resource&gt;
&lt;Service-Component&gt;
  OSGI-INF/serviceComponents.xml
&lt;/Service-Component&gt;
...
</pre>
</div></div>

<h2><a name="ApacheFelixMavenSCRPlugin-Annotations"></a>Annotations</h2>

<p>The <tt>maven-scr-plugin</tt> uses the <tt>SCR</tt> annotations from the corresponding subproject at Apache Felix. All annotations are in the <tt>org.apache.felix.scr.annotations</tt> package. If you want to use the annotations in your project, make sure that you add a dependency to the annotations to your <tt>POM</tt>:</p>
<div class="preformatted"><div class="preformattedContent">
<pre>&lt;dependency&gt;
    &lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
    &lt;artifactId&gt;org.apache.felix.scr.annotations&lt;/artifactId&gt;
    &lt;version&gt;0.9.0&lt;/version&gt;
&lt;/dependency&gt;
</pre>
</div></div>
<p>The following annotations are supported:</p>
<ul>
	<li><tt><a href="#ApacheFelixMavenSCRPlugin-scrancomponent" title="scran_component on Apache Felix Maven SCR Plugin">Component</a></tt></li>
	<li><tt><a href="#ApacheFelixMavenSCRPlugin-scranservice" title="scran_service on Apache Felix Maven SCR Plugin">Service</a></tt></li>
	<li><tt><a href="#ApacheFelixMavenSCRPlugin-scranproperty" title="scran_property on Apache Felix Maven SCR Plugin">Property</a></tt></li>
	<li><tt><a href="#ApacheFelixMavenSCRPlugin-scranreference" title="scran_reference on Apache Felix Maven SCR Plugin">Reference</a></tt></li>
</ul>


<p><a name="ApacheFelixMavenSCRPlugin-scran.component"></a></p>

<h3><a name="ApacheFelixMavenSCRPlugin-%7B%7BComponent%7D%7D"></a><tt>Component</tt></h3>

<p>The <tt>Component</tt> annotation is the only required annotation. If this annotation is not declared for a Java class, the class is not declared as a component.</p>

<p>This annotation is used to declare the <tt>&lt;component&gt;</tt> element of the component declaration. See section 112.4.3, Component Element, in the OSGi Service Platform Service Compendium Specification for more information. The required <tt>&lt;implementation&gt;</tt> element is automatically generated with the fully qualified name of the class containing the <tt>Component</tt> annotation.</p>

<p>Supported attributes:</p>
<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <b>Name</b> </td>
<td class='confluenceTd'> <b>Default Value</b> </td>
<td class='confluenceTd'> <b>Required</b> </td>
<td class='confluenceTd'> <b>SCR</b> </td>
<td class='confluenceTd'> <b>Metatype</b> </td>
<td class='confluenceTd'> <b>Description</b> </td>
</tr>
<tr>
<td class='confluenceTd'> name </td>
<td class='confluenceTd'> Fully qualified name of the Java class </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>component.name</tt> </td>
<td class='confluenceTd'> <tt>OCD.id</tt> </td>
<td class='confluenceTd'> Defines the Component name also used as the PID for the Configuration Admin Service </td>
</tr>
<tr>
<td class='confluenceTd'> ds </td>
<td class='confluenceTd'> <tt>true</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether Declarative Services descriptor is generated or not. If this parameter is not set or set to <tt>true</tt> the Declarative Services descriptor is generated in the service descriptor file for this component. Otherwise no Declarative Services descriptor is generated for this component. </td>
</tr>
<tr>
<td class='confluenceTd'> componentAbstract </td>
<td class='confluenceTd'> see description </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> This marks an abstract service description which is not added to the descriptor but intended for reuse through inheritance. This attribute defaults to <tt>true</tt> for abstract classes and <tt>false</tt> for concrete classes. </td>
</tr>
<tr>
<td class='confluenceTd'> enabled </td>
<td class='confluenceTd'> <tt>true</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>component.enabled</tt> </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether the component is enabled when the bundle starts </td>
</tr>
<tr>
<td class='confluenceTd'> factory </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>component.factory</tt> </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether the component is a factory component </td>
</tr>
<tr>
<td class='confluenceTd'> immediate </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>component.immediate</tt> </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether the component is immediately activated </td>
</tr>
<tr>
<td class='confluenceTd'> inherit </td>
<td class='confluenceTd'> <tt>true</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether any service, property and reference declarations from base classes should be inherited by this class. </td>
</tr>
<tr>
<td class='confluenceTd'> metatype </td>
<td class='confluenceTd'> <tt>false</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether Metatype Service data is generated or not. If this parameter is not set or set to <tt>true</tt> Metatype Service data is generated in the <tt>metatype.xml</tt> file for this component. Otherwise no Metatype Service data is generated for this component. </td>
</tr>
<tr>
<td class='confluenceTd'> label </td>
<td class='confluenceTd'> <tt>%&lt;name&gt;.name</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>OCD.name</tt> </td>
<td class='confluenceTd'> This is generally used as a title for the object described by the meta type. This name may be localized by prepending a <tt>%</tt> sign to the name. </td>
</tr>
<tr>
<td class='confluenceTd'> description </td>
<td class='confluenceTd'> <tt>%&lt;name&gt;.name</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>OCD.description</tt> </td>
<td class='confluenceTd'> This is generally used as a description for the object described by the meta type. This name may be localized by prepending a <tt>%</tt> sign to the name. </td>
</tr>
<tr>
<td class='confluenceTd'> createPid </td>
<td class='confluenceTd'> <tt>true</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>service.pid</tt> </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Generate the <tt>service.pid</tt> property if non is declared. </td>
</tr>
</tbody></table>

<h3><a name="ApacheFelixMavenSCRPlugin-AbstractServiceDescriptions"></a>Abstract Service Descriptions</h3>

<p>If the <tt>Component</tt> annotations contains the attribute <tt>componentAbstract</tt> with a value of true, the containing class is regarded as an abstract class. It is not added to the service descriptor and the tags are not validated. The information about this class is added to the bundle. Classes from other bundles (or the same) can extends this abstract class and do not need to specify the references of the abstract class if they set the <tt>inherit</tt> parameter on the <tt>scr.component</tt> tag to true.</p>

<p>This allows to create abstract classes which already provide some valuable functionality without having to deal with the details like reference definitions in each and every subclass.</p>

<p><a name="ApacheFelixMavenSCRPlugin-scran.service"></a></p>

<h3><a name="ApacheFelixMavenSCRPlugin-%7B%7BService%7D%7D"></a><tt>Service</tt></h3>

<p>The <tt>Service</tt> annotation defines whether and which service interfaces are provided by the component. This is a class annotation.</p>

<p>This tag is used to declare <tt>&lt;service&gt;</tt> and <tt>&lt;provide&gt;</tt> elements of the component declaration. See section 112.4.6, Service Elements, in the OSGi Service Platform Service Compendium Specification for more information.</p>

<p>Supported attributes:</p>
<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <b>Name</b> </td>
<td class='confluenceTd'> <b>Default Value</b> </td>
<td class='confluenceTd'> <b>Required</b> </td>
<td class='confluenceTd'> <b>Descriptor</b> </td>
<td class='confluenceTd'> <b>Description</b> </td>
</tr>
<tr>
<td class='confluenceTd'> value </td>
<td class='confluenceTd'> All implemented interfaces </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>provide.interface</tt> </td>
<td class='confluenceTd'> The name of the service interface provided by the component. This can either be the fully qualified  name or just the interface class name if the interface is either in the same package or is imported. If this property is not set <tt>provide</tt> elements will be generated for all interfaces generated by the class </td>
</tr>
<tr>
<td class='confluenceTd'> serviceFactory </td>
<td class='confluenceTd'> <tt>false</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>service.servicefactory</tt> </td>
<td class='confluenceTd'> Whether the component is registered as a <tt>ServiceFactory</tt> or not </td>
</tr>
</tbody></table>
<p>Omitting the <tt>Service</tt> annotation will just define (and activate if required) the component but not register it as a service. Multiple <tt>Service</tt> annotations may be declared each with its own <tt>value</tt>. These annotations need to be wrapped into a <tt>Services</tt> anotation. The component is registered as a <tt>ServiceFactory</tt> if at least on <tt>Service</tt> annotations declares the <tt>serviceFactory</tt> attribute as <tt>true</tt>.</p>

<p><a name="ApacheFelixMavenSCRPlugin-scran.property"></a></p>

<h3><a name="ApacheFelixMavenSCRPlugin-%7B%7BProperty%7D%7D"></a><tt>Property</tt></h3>

<p>The <tt>Property</tt> annotation defines properties which are made available to the component through the <tt>ComponentContext.getProperties()</tt> method. These tags are not strictly required but may be used by components to defined initial configuration. Additionally properties may be set here to identify the component if it is registered as a service, for example the <tt>service.description</tt> and <tt>service.vendor</tt> properties.</p>

<p>This tag may be defined in the Java Class comment of the component or in a coment to a field defining a constant with the name of the property.</p>

<p>This tag is used to declare <tt>&lt;property&gt;</tt> elements of the component declaration. See section 112.4.5, Properties and Property Elements, in the OSGi Service Platform Service Compendium Specification for more information.</p>

<p>Supported parameters:</p>
<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <b>Name</b> </td>
<td class='confluenceTd'> <b>Default Value</b> </td>
<td class='confluenceTd'> <b>Required</b> </td>
<td class='confluenceTd'> <b>SCR</b> </td>
<td class='confluenceTd'> <b>Metatype</b> </td>
<td class='confluenceTd'> <b>Description</b> </td>
</tr>
<tr>
<td class='confluenceTd'> name </td>
<td class='confluenceTd'> The name of constant </td>
<td class='confluenceTd'> yes </td>
<td class='confluenceTd'> <tt>property.name</tt> </td>
<td class='confluenceTd'> <tt>AD.id</tt> </td>
<td class='confluenceTd'> The name of the property. If this tag is defined on a field with an initialization expression, the value of that expression is used as the name if the field is of type <tt>String</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> value </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.value</tt> </td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> The string value of the property. This can either be a single value or an array. </td>
</tr>
<tr>
<td class='confluenceTd'> longValue </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.value</tt> </td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> The long value of the property. This can either be a single value or an array. </td>
</tr>
<tr>
<td class='confluenceTd'> doubleValue </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.value</tt> </td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> The double value of the property. This can either be a single value or an array. </td>
</tr>
<tr>
<td class='confluenceTd'> floatValue </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.value</tt> </td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> The float value of the property. This can either be a single value or an array. </td>
</tr>
<tr>
<td class='confluenceTd'> intValue </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.value</tt> </td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> The int value of the property. This can either be a single value or an array. </td>
</tr>
<tr>
<td class='confluenceTd'> byteValue </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.value</tt> </td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> The byte value of the property. This can either be a single value or an array. </td>
</tr>
<tr>
<td class='confluenceTd'> charValue </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.value</tt> </td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> The char value of the property. This can either be a single value or an array. </td>
</tr>
<tr>
<td class='confluenceTd'> boolValue </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.value</tt> </td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> The boolean value of the property. This can either be a single value or an array. </td>
</tr>
<tr>
<td class='confluenceTd'> shortValue </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.value</tt> </td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> The short value of the property. This can either be a single value or an array. </td>
</tr>
<tr>
<td class='confluenceTd'> label </td>
<td class='confluenceTd'> <tt>%&lt;name&gt;.name</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>AD.name</tt> </td>
<td class='confluenceTd'> The label to display in a form to configure this property. This name may be localized by prepending a <tt>%</tt> sign to the name. </td>
</tr>
<tr>
<td class='confluenceTd'> description </td>
<td class='confluenceTd'> <tt>%&lt;name&gt;.description</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>AD.description</tt> </td>
<td class='confluenceTd'> A descriptive text to provide the client in a form to configure this property. This name may be localized by prepending a <tt>%</tt> sign to the name. </td>
</tr>
<tr>
<td class='confluenceTd'> propertyPrivate </td>
<td class='confluenceTd'> Depending on the name </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> See description </td>
<td class='confluenceTd'> Boolean flag defining whether a metatype descriptor entry should be generated for this property or not. By default a metatype descriptor entry, i.e. an <tt>AD</tt> element, is generated except for the properties <tt>service.pid</tt>, <tt>service.description</tt>, <tt>service.id</tt>, <tt>service.ranking</tt>, <tt>service.vendor</tt>, <tt>service.bundlelocation</tt> and <tt>service.factoryPid</tt>. If a property should not be available for display in a configuration user interface, this parameter should be set to <tt>true</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> cardinality </td>
<td class='confluenceTd'> Depends on property value(s) </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>AD.cardinality</tt> </td>
<td class='confluenceTd'> Defines the cardinality of the property and its collection type. If the cardinality is negative, the property is expected to be stored in a <tt>java.util.Vector</tt> (primitive types such as <tt>boolean</tt> are boxed in the Wrapper class), if the cardinality is positive, the property is stored in an array (primitve types are unboxed, that is <tt>Boolean</tt> type values are stored in <tt>boolean[]</tt>). The actual value defines the maximum number of elements in the vector or array, where <tt>Integer.MIN_INT</tt> describes an unbounded Vector and <tt>Integer.MAX_INT</tt> describes an unbounded array. If the cardinality is zero, the property is a scalar value. If the defined value of the property is set in the <tt>value</tt> attribute, the cardinality defaults to <tt>0</tt> (zero for scalar value). If the property is defined in one or more properties starting with <tt>values</tt>, the cardinality defaults to <tt>Integer.MAX_INT</tt>, that is an unbounded array. </td>
</tr>
<tr>
<td class='confluenceTd'> options </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> See below </td>
<td class='confluenceTd'> See below for a description of the <tt>options</tt> attribute. </td>
</tr>
</tbody></table>
<ul>
	<li>Generating <tt>&lt;properties&gt;</tt> elements referring to bundle entries is not currently supported.</li>
	<li>Multiple property annotations can be embedded in the <tt>Properties</tt> annoation.</li>
</ul>


<h4><a name="ApacheFelixMavenSCRPlugin-NamingtheProperty"></a>Naming the Property</h4>

<p>It is important to carefully define the name of properties. By using a constant of the form</p>
<div class="preformatted"><div class="preformattedContent">
<pre>@Property(value="default value")
static final String CONSTANT_NAME = "property.name";
</pre>
</div></div>
<p>and defining the <tt>Property</tt> annotation on this constant, the name of the property is taken from the constant value. Thus it may easily be ensured, that both the property in the descriptor files and the property used by the implementation are actually the same. In addition the value attribute can point to another constant.</p>

<h4><a name="ApacheFelixMavenSCRPlugin-The%7B%7Boptions%7D%7DParameter"></a>The <tt>options</tt> Parameter</h4>

<p>Some properties may only be set to a set of possible values. To support user interfaces which provide a selection list of values or a list of checkboxes the option values and labels may be defined as parameters to the <tt>Property</tt> annotation. All parameters in the form of name-value pairs occurring <em>after</em> the <tt>options</tt> attribute are used to build the list of available value options. The parameter name is used as the value while the parameter value is used as the label in the user interface. This label may be prepended with a <tt>%</tt> sign to localize the string.</p>

<p>The options are written to the <tt>metatype.xml</tt> file as <tt>Option</tt> elements inside the <tt>AD</tt> element defining the property. The name of the parameter will be used for the <tt>Option.value</tt> attribute while the value of the parameter defines the <tt>Option.label</tt> attribute.</p>

<p>Please note, that all parameters of the <tt>Property</tt> annotation occurring <em>after</em> the <tt>options</tt> parameter are used to build the options list. Hence no non-option value parameters should actually follow the <tt>options</tt> parameter.</p>

<h4><a name="ApacheFelixMavenSCRPlugin-MultivalueProperties"></a>Multivalue Properties</h4>

<p>Generally the value of a property is scalar, that is a property has a single value such as <tt>true</tt>, <tt>5</tt> or <tt>"This is a String"</tt>. Such scalar values are defined with the different <tt>value</tt> attributes of the <tt>Property</tt> annotation. In the case of a scalar property value, the <tt>cardinality</tt> parameter value is assumed to be <tt>0</tt> (zero) unless of course set otherwise.</p>

<p>There may be properties, which have a list of values, such as a list of possible URL mappings for an URL Mapper. Such multiple values are defined just by comma separate as the value of the annotation parameter.</p>

<p>If the cardinality of the property is not explicilty set with the <tt>cardinality</tt> property, it defaults to <tt>Integer.MAX_INT</tt>, i.e. unbound array, if multiple values are defined. Otherwise the <tt>cardinality</tt> parameter may be set for example to a negative value to store the values in a <tt>java.util.Vector</tt> instead.</p>

<p><a name="ApacheFelixMavenSCRPlugin-scran.reference"></a></p>

<h3><a name="ApacheFelixMavenSCRPlugin-%7B%7BReference%7D%7D"></a><tt>Reference</tt></h3>

<p>The <tt>Reference</tt> annotation defines references to other services made available to the component by the Service Component Runtime.</p>

<p>This annotation may be declared on a Class level or any Java field to which it might apply. Depending on where the annotation is declared, the parameters may have different default values.</p>

<p>This annotation is used to declare <tt>&lt;reference&gt;</tt> elements of the component declaration. See section 112.4.7, Reference Element, in the OSGi Service Platform Service Compendium Specification for more information.</p>

<p>Supported parameters:</p>
<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <b>Name</b> </td>
<td class='confluenceTd'> <b>Default Value</b> </td>
<td class='confluenceTd'> <b>Required</b> </td>
<td class='confluenceTd'> <b>Descriptor</b> </td>
<td class='confluenceTd'> <b>Description</b> </td>
</tr>
<tr>
<td class='confluenceTd'> name </td>
<td class='confluenceTd'> Name of the field </td>
<td class='confluenceTd'> yes </td>
<td class='confluenceTd'> <tt>reference.name</tt> </td>
<td class='confluenceTd'> The local name of the reference. If the <tt>Reference</tt> annotation is declared in the class comment, this parameter is required. If the annotation is declared on a field, the default value for the <tt>name</tt> parameter is the name of the field </td>
</tr>
<tr>
<td class='confluenceTd'> interface </td>
<td class='confluenceTd'> Type of the field </td>
<td class='confluenceTd'> yes </td>
<td class='confluenceTd'> <tt>reference.interface</tt> </td>
<td class='confluenceTd'> The name of the service interface. This name is used by the Service Component Runtime to access the service on behalf of the component. If the <tt>Reference</tt> annotation is declared on a class level, this parameter is required. If the annoation is declared on a field, the default value for the <tt>interface</tt> parameter is the type of the field </td>
</tr>
<tr>
<td class='confluenceTd'> cardinality </td>
<td class='confluenceTd'> <tt>1..1</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>reference.cardinality</tt> </td>
<td class='confluenceTd'> The cardinality of the service reference. This must be one of value from the enumeration <tt>ReferenceCardinality</tt> </td>
</tr>
<tr>
<td class='confluenceTd'> policy </td>
<td class='confluenceTd'> <tt>static</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>reference.policy</tt> </td>
<td class='confluenceTd'> The dynamicity policy of the reference. If <tt>dynamic</tt> the service will be made available to the component as it comes and goes. If <tt>static</tt> the component will be deactivated and re-activated if the service comes and/or goes away. This must be one of <tt>static</tt> and <tt>dynamic</tt> </td>
</tr>
<tr>
<td class='confluenceTd'> target </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>reference.target</tt> </td>
<td class='confluenceTd'> A service target filter to select specific services to be made available. In order to be able to overwrite the value of this value by a configuration property, this parameter must be declared. If the parameter is not declared, the respective declaration attribute will not be generated </td>
</tr>
<tr>
<td class='confluenceTd'> bind </td>
<td class='confluenceTd'> See description </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>reference.bind</tt> </td>
<td class='confluenceTd'> The name of the method to be called when the service is to be bound to the component. The default value is the name created by appending the reference <tt>name</tt> to the string <tt>bind</tt>. The method must be declared <tt>public</tt> or <tt>protected</tt> and take single argument which is declared with the service interface type </td>
</tr>
<tr>
<td class='confluenceTd'> unbind </td>
<td class='confluenceTd'> See description </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>reference.unbind</tt> </td>
<td class='confluenceTd'> The name of the method to be called when the service is to be unbound from the component. The default value is the name created by appending the reference <tt>name</tt> to the string <tt>unbind</tt>. The method must be declared <tt>public</tt> or <tt>protected</tt> and take single argument which is declared with the service interface type </td>
</tr>
<tr>
<td class='confluenceTd'> strategy </td>
<td class='confluenceTd'> <tt>event</tt> </td>
<td class='confluenceTd'> no </td>
<th class='confluenceTh'> <tt>reference.</tt> </th>
<td class='confluenceTd'> The strategy used for this reference, one of <tt>event</tt> or <tt>lookup</tt> </td>
</tr>
</tbody></table>
<p><em>Notes</em>:</p>
<ul>
	<li>If you define a reference on a field with a strategy of <tt>event</tt> and there is no bind or unbind method, the plugin will create the necessary methods.</li>
</ul>


<h2><a name="ApacheFelixMavenSCRPlugin-JavaDoctags"></a>JavaDoc tags</h2>

<p>The <tt>scr</tt> goal of the <tt>maven-scr-plugin</tt> looks for the following JavaDoc tags when building component descriptors:</p>
<ul>
	<li><tt><a href="#ApacheFelixMavenSCRPlugin-scrcomponent" title="scr_component on Apache Felix Maven SCR Plugin">scr.component</a></tt></li>
	<li><tt><a href="#ApacheFelixMavenSCRPlugin-scrproperty" title="scr_property on Apache Felix Maven SCR Plugin">scr.property</a></tt></li>
	<li><tt><a href="#ApacheFelixMavenSCRPlugin-scrservice" title="scr_service on Apache Felix Maven SCR Plugin">scr.service</a></tt></li>
	<li><tt><a href="#ApacheFelixMavenSCRPlugin-scrreference" title="scr_reference on Apache Felix Maven SCR Plugin">scr.reference</a></tt></li>
</ul>


<p><a name="ApacheFelixMavenSCRPlugin-scr.component"></a></p>

<h3><a name="ApacheFelixMavenSCRPlugin-%7B%7Bscr.component%7D%7D"></a><tt>scr.component</tt></h3>

<p>The <tt>scr.component</tt> tag is the only required tag. If this tag is not declared in the Java class comment, the class is not declared as a component.</p>

<p>This tag is used to declare the <tt>&lt;component&gt;</tt> element of the component declaration. See section 112.4.3, Component Element, in the OSGi Service Platform Service Compendium Specification for more information. The required <tt>&lt;implementation&gt;</tt> element is automatically generated with the fully qualified name of the class containing the <tt>scr.component</tt> tag.</p>

<p>Supported parameters:</p>
<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <b>Name</b> </td>
<td class='confluenceTd'> <b>Default Value</b> </td>
<td class='confluenceTd'> <b>Required</b> </td>
<td class='confluenceTd'> <b>SCR</b> </td>
<td class='confluenceTd'> <b>Metatype</b> </td>
<td class='confluenceTd'> <b>Description</b> </td>
</tr>
<tr>
<td class='confluenceTd'> name </td>
<td class='confluenceTd'> Fully qualified name of the Java class </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>component.name</tt> </td>
<td class='confluenceTd'> <tt>OCD.id</tt> </td>
<td class='confluenceTd'> Defines the Component name also used as the PID for the Configuration Admin Service </td>
</tr>
<tr>
<td class='confluenceTd'> ds </td>
<td class='confluenceTd'> <tt>true</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether Declarative Services descriptor is generated or not. If this parameter is not set or set to <tt>true</tt> the Declarative Services descriptor is generated in the service descriptor file for this component. Otherwise no Declarative Services descriptor is generated for this component. </td>
</tr>
<tr>
<td class='confluenceTd'> abstract </td>
<td class='confluenceTd'> see description </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> This marks an abstract service description which is not added to the descriptor but intended for reuse through inheritance. This attribute defaults to <tt>true</tt> for abstract classes and <tt>false</tt> for concrete classes. </td>
</tr>
<tr>
<td class='confluenceTd'> enabled </td>
<td class='confluenceTd'> <tt>true</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>component.enabled</tt> </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether the component is enabled when the bundle starts </td>
</tr>
<tr>
<td class='confluenceTd'> factory </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>component.factory</tt> </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether the component is a factory component </td>
</tr>
<tr>
<td class='confluenceTd'> immediate </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>component.immediate</tt> </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether the component is immediately activated </td>
</tr>
<tr>
<td class='confluenceTd'> inherit </td>
<td class='confluenceTd'> <tt>true</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether any service, property and reference declarations from base classes should be inherited by this class. </td>
</tr>
<tr>
<td class='confluenceTd'> metatype </td>
<td class='confluenceTd'> <tt>true</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Whether Metatype Service data is generated or not. If this parameter is not set or set to <tt>true</tt> Metatype Service data is generated in the <tt>metatype.xml</tt> file for this component. Otherwise no Metatype Service data is generated for this component. </td>
</tr>
<tr>
<td class='confluenceTd'> label </td>
<td class='confluenceTd'> <tt>%&lt;name&gt;.name</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>OCD.name</tt> </td>
<td class='confluenceTd'> This is generally used as a title for the object described by the meta type. This name may be localized by prepending a <tt>%</tt> sign to the name. </td>
</tr>
<tr>
<td class='confluenceTd'> description </td>
<td class='confluenceTd'> <tt>%&lt;name&gt;.name</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>OCD.description</tt> </td>
<td class='confluenceTd'> This is generally used as a description for the object described by the meta type. This name may be localized by prepending a <tt>%</tt> sign to the name. </td>
</tr>
<tr>
<td class='confluenceTd'> create-pid </td>
<td class='confluenceTd'> <tt>true</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>service.pid</tt> </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> Generate the <tt>service.pid</tt> property if non is declared. </td>
</tr>
</tbody></table>

<h4><a name="ApacheFelixMavenSCRPlugin-AbstractServiceDescriptions"></a>Abstract Service Descriptions</h4>

<p>If the <tt>scr.component</tt> tag contains the parameter <tt>abstract</tt> with a value of true, the containing class is regarded as an abstract class. It is not added to the service descriptor and the tags are not validated. The information about this class is added to the bundle. Classes from other bundles (or the same) can extends this abstract class and do not need to specify the references of the abstract class if they set the <tt>inherit</tt> parameter on the <tt>scr.component</tt> tag to true.</p>

<p>This allows to create abstract classes which already provide some valuable functionality without having to deal with the details like reference definitions in each and every subclass.</p>

<p><a name="ApacheFelixMavenSCRPlugin-scr.property"></a></p>

<h3><a name="ApacheFelixMavenSCRPlugin-%7B%7Bscr.property%7D%7D"></a><tt>scr.property</tt></h3>

<p>The <tt>scr.property</tt> tag defines properties which are made available to the component through the <tt>ComponentContext.getProperties()</tt> method. These tags are not strictly required but may be used by components to defined initial configuration. Additionally properties may be set here to identify the component if it is registered as a service, for example the <tt>service.description</tt> and <tt>service.vendor</tt> properties.</p>

<p>This tag may be defined in the Java Class comment of the component or in a coment to a field defining a constant with the name of the property.</p>

<p>This tag is used to declare <tt>&lt;property&gt;</tt> elements of the component declaration. See section 112.4.5, Properties and Property Elements, in the OSGi Service Platform Service Compendium Specification for more information.</p>

<p>Supported parameters:</p>
<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <b>Name</b> </td>
<td class='confluenceTd'> <b>Default Value</b> </td>
<td class='confluenceTd'> <b>Required</b> </td>
<td class='confluenceTd'> <b>SCR</b> </td>
<td class='confluenceTd'> <b>Metatype</b> </td>
<td class='confluenceTd'> <b>Description</b> </td>
</tr>
<tr>
<td class='confluenceTd'> name </td>
<td class='confluenceTd'> The name of constant </td>
<td class='confluenceTd'> yes </td>
<td class='confluenceTd'> <tt>property.name</tt> </td>
<td class='confluenceTd'> <tt>AD.id</tt> </td>
<td class='confluenceTd'> The name of the property. If this tag is defined on a field with an initialization expression, the value of that expression is used as the name if the field is of type <tt>String</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> value </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.value</tt> </td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> The value of the property. If the property type is not <tt>String</tt>, parsing of the value is done using the <tt>valueOf(String)</tt> method of the class defined by the property type </td>
</tr>
<tr>
<td class='confluenceTd'> type </td>
<td class='confluenceTd'> <tt>String</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>property.type</tt> </td>
<td class='confluenceTd'> <tt>AD.type</tt> </td>
<td class='confluenceTd'> The type of the property value. This must be one of <tt>String</tt>, <tt>Long</tt>, <tt>Double</tt>, <tt>Float</tt>, <tt>Integer</tt>, <tt>Byte</tt>, <tt>Char</tt>, <tt>Boolean</tt> and <tt>Short</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> label </td>
<td class='confluenceTd'> <tt>%&lt;name&gt;.name</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>AD.name</tt> </td>
<td class='confluenceTd'> The label to display in a form to configure this property. This name may be localized by prepending a <tt>%</tt> sign to the name. </td>
</tr>
<tr>
<td class='confluenceTd'> description </td>
<td class='confluenceTd'> <tt>%&lt;name&gt;.description</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>AD.description</tt> </td>
<td class='confluenceTd'> A descriptive text to provide the client in a form to configure this property. This name may be localized by prepending a <tt>%</tt> sign to the name. </td>
</tr>
<tr>
<td class='confluenceTd'> private </td>
<td class='confluenceTd'> Depending on the name </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> See description </td>
<td class='confluenceTd'> Boolean flag defining whether a metatype descriptor entry should be generated for this property or not. By default a metatype descriptor entry, i.e. an <tt>AD</tt> element, is generated except for the properties <tt>service.pid</tt>, <tt>service.description</tt>, <tt>service.id</tt>, <tt>service.ranking</tt>, <tt>service.vendor</tt>, <tt>service.bundlelocation</tt> and <tt>service.factoryPid</tt>. If a property should not be available for display in a configuration user interface, this parameter should be set to <tt>true</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> cardinality </td>
<td class='confluenceTd'> Depends on property value(s) </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>AD.cardinality</tt> </td>
<td class='confluenceTd'> Defines the cardinality of the property and its collection type. If the cardinality is negative, the property is expected to be stored in a <tt>java.util.Vector</tt> (primitive types such as <tt>boolean</tt> are boxed in the Wrapper class), if the cardinality is positive, the property is stored in an array (primitve types are unboxed, that is <tt>Boolean</tt> type values are stored in <tt>boolean[]</tt>). The actual value defines the maximum number of elements in the vector or array, where <tt>Integer.MIN_INT</tt> describes an unbounded Vector and <tt>Integer.MAX_INT</tt> describes an unbounded array. If the cardinality is zero, the property is a scalar value. If the defined value of the property is set in the <tt>value</tt> attribute, the cardinality defaults to <tt>0</tt> (zero for scalar value). If the property is defined in one or more properties starting with <tt>values</tt>, the cardinality defaults to <tt>Integer.MAX_INT</tt>, that is an unbounded array. </td>
</tr>
<tr>
<td class='confluenceTd'> options </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> See below </td>
<td class='confluenceTd'> See below for a description of the <tt>options</tt> parameter. </td>
</tr>
<tr>
<td class='confluenceTd'> values&#42; </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> See below </td>
<td class='confluenceTd'> See below for a description of parameters starting with <tt>values</tt>. </td>
</tr>
<tr>
<td class='confluenceTd'> valueRef </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> <tt>AD.default</tt> </td>
<td class='confluenceTd'> A constant containing the value for this property. The constant can either be declared in the same class as this property or in any class that is imported. The type of the property is derived from the constant. </td>
</tr>
<tr>
<td class='confluenceTd'> valueRefs </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> See below </td>
<td class='confluenceTd'> Same as the <tt>values</tt> attribute with the difference that it acts like the <tt>valueRef</tt> attribute and the value points to a constants defining the multi value for the property. </td>
</tr>
</tbody></table>
<p><em>Notes</em>:</p>
<ul>
	<li>Generating <tt>&lt;properties&gt;</tt> elements referring to bundle entries is not currently supported.</li>
</ul>


<h4><a name="ApacheFelixMavenSCRPlugin-Namingtheproperty"></a>Naming the property</h4>

<p>It is important to carefully define the name of properties. By using a constant of the form</p>
<div class="preformatted"><div class="preformattedContent">
<pre>/** @scr.property value="default value" */
static final String CONSTANT_NAME = "property.name";
</pre>
</div></div>
<p>and defining the <tt>scr.property</tt> tag on this constant, the name of the property is taken from the constant value. Thus it may easily be ensured, that both the property in the descriptor files and the property used by the implementation are actually the same.</p>

<h4><a name="ApacheFelixMavenSCRPlugin-The%7B%7Boptions%7D%7Dparameter"></a>The <tt>options</tt> parameter</h4>

<p>Some properties may only be set to a set of possible values. To support user interfaces which provide a selection list of values or a list of checkboxes the option values and labels may be defined as parameters to the <tt>scr.property</tt> tag. All parameters in the form of name-value pairs occurring <em>after</em> the <tt>options</tt> parameter are used to build the list of available value options. The parameter name is used as the value while the parameter value is used as the label in the user interface. This label may be prepended with a <tt>%</tt> sign to localize the string.</p>

<p>The options are written to the <tt>metatype.xml</tt> file as <tt>Option</tt> elements inside the <tt>AD</tt> element defining the property. The name of the parameter will be used for the <tt>Option.value</tt> attribute while the value of the parameter defines the <tt>Option.label</tt> attribute.</p>

<p>Please note, that all parameters of the <tt>scr.property</tt> tag occurring <em>after</em> the <tt>options</tt> parameter are used to build the options list. Hence no non-option value parameters should actually follow the <tt>options</tt> parameter.</p>

<h4><a name="ApacheFelixMavenSCRPlugin-Multivalueproperties"></a>Multivalue properties</h4>

<p>Generally the value of a property is scalar, that is a property has a single value such as <tt>true</tt>, <tt>5</tt> or <tt>"This is a String"</tt>. Such scalar values are defined with the <tt>value</tt> parameter of the <tt>scr.property</tt> tag. In the case of a scalar property value, the <tt>cardinality</tt> parameter value is assumed to be <tt>0</tt> (zero) unless of course set otherwise.</p>

<p>There may be properties, which have a list of values, such as a list of possible URL mappings for an URL Mapper. Such multiple values are defined in one more parameters whose name starts with <tt>values</tt>. Each parameter must of course have a unique name which is not in any except to differentiate the parameters.</p>

<p>If the cardinality of the property is not explicilty set with the <tt>cardinality</tt> property, it defaults to <tt>Integer.MAX_INT</tt>, i.e. unbound array, if multiple values with a series of <tt>values</tt> parameters are defined. Otherwise the <tt>cardinality</tt> parameter may be set for example to a negative value to store the values in a <tt>java.util.Vector</tt> instead.</p>

<p><a name="ApacheFelixMavenSCRPlugin-scr.service"></a></p>

<h3><a name="ApacheFelixMavenSCRPlugin-%7B%7Bscr.service%7D%7D"></a><tt>scr.service</tt></h3>

<p>The <tt>scr.service</tt> tag defines whether and which service interfaces are provided by the component.</p>

<p>This tag is expected in the Java Class comment of the component.</p>

<p>This tag is used to declare <tt>&lt;service&gt;</tt> and <tt>&lt;provide&gt;</tt> elements of the component declaration. See section 112.4.6, Service Elements, in the OSGi Service Platform Service Compendium Specification for more information.</p>

<p>Supported parameters:</p>
<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <b>Name</b> </td>
<td class='confluenceTd'> <b>Default Value</b> </td>
<td class='confluenceTd'> <b>Required</b> </td>
<td class='confluenceTd'> <b>Descriptor</b> </td>
<td class='confluenceTd'> <b>Description</b> </td>
</tr>
<tr>
<td class='confluenceTd'> interface </td>
<td class='confluenceTd'> All implemented interfaces </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>provide.interface</tt> </td>
<td class='confluenceTd'> The name of the service interface provided by the component. This can either be the fully qualified  name or just the interface class name if the interface is either in the same package or is imported. If this property is not set <tt>provide</tt> elements will be generated for all interfaces generated by the class </td>
</tr>
<tr>
<td class='confluenceTd'> servicefactory </td>
<td class='confluenceTd'> <tt>false</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>service.servicefactory</tt> </td>
<td class='confluenceTd'> Whether the component is registered as a <tt>ServiceFactory</tt> or not </td>
</tr>
</tbody></table>
<p>Omitting the <tt>scr.service</tt> tag will just define (and activate if required) the component but not register it as a service. Multiple <tt>scr.service</tt> tags may be declared each with its own <tt>interface</tt>. The component is registered as a <tt>ServiceFactory</tt> if at least on <tt>scr.service</tt> tag declares the <tt>servicefactory</tt> parameter as <tt>true</tt>.</p>

<p><a name="ApacheFelixMavenSCRPlugin-scr.reference"></a></p>

<h3><a name="ApacheFelixMavenSCRPlugin-%7B%7Bscr.reference%7D%7D"></a><tt>scr.reference</tt></h3>

<p>The <tt>scr.reference</tt> tag defines references to other services made available to the component by the Service Component Runtime.</p>

<p>This tag may be declared in the java Class comment or any Java Field to which it might apply. Depending on where the tag is declared, the parameters may have different default values.</p>

<p>This tag is used to declare <tt>&lt;reference&gt;</tt> elements of the component declaration. See section 112.4.7, Reference Element, in the OSGi Service Platform Service Compendium Specification for more information.</p>

<p>Supported parameters:</p>
<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <b>Name</b> </td>
<td class='confluenceTd'> <b>Default Value</b> </td>
<td class='confluenceTd'> <b>Required</b> </td>
<td class='confluenceTd'> <b>Descriptor</b> </td>
<td class='confluenceTd'> <b>Description</b> </td>
</tr>
<tr>
<td class='confluenceTd'> name </td>
<td class='confluenceTd'> Name of the field </td>
<td class='confluenceTd'> yes </td>
<td class='confluenceTd'> <tt>reference.name</tt> </td>
<td class='confluenceTd'> The local name of the reference. If the <tt>scr.reference</tt> tag is declared in the class comment, this parameter is required. If the tag is declared in the field comment, the default value for the <tt>name</tt> parameter is the name of the field </td>
</tr>
<tr>
<td class='confluenceTd'> interface </td>
<td class='confluenceTd'> Type of the field </td>
<td class='confluenceTd'> yes </td>
<td class='confluenceTd'> <tt>reference.interface</tt> </td>
<td class='confluenceTd'> The name of the service interface. This name is used by the Service Component Runtime to access the service on behalf of the component. If the <tt>scr.reference</tt> tag is declared in the class comment, this parameter is required. If the tag is declared in the field comment, the default value for the <tt>interface</tt> parameter is the type of the field </td>
</tr>
<tr>
<td class='confluenceTd'> cardinality </td>
<td class='confluenceTd'> <tt>1..1</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>reference.cardinality</tt> </td>
<td class='confluenceTd'> The cardinality of the service reference. This must be one of <tt>0..1</tt>, <tt>1..1</tt>, <tt>0..n</tt>, and <tt>1..n</tt> </td>
</tr>
<tr>
<td class='confluenceTd'> policy </td>
<td class='confluenceTd'> <tt>static</tt> </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>reference.policy</tt> </td>
<td class='confluenceTd'> The dynamicity policy of the reference. If <tt>dynamic</tt> the service will be made available to the component as it comes and goes. If <tt>static</tt> the component will be deactivated and re-activated if the service comes and/or goes away. This must be one of <tt>static</tt> and <tt>dynamic</tt> </td>
</tr>
<tr>
<td class='confluenceTd'> target </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li></li>
</ul>
</td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>reference.target</tt> </td>
<td class='confluenceTd'> A service target filter to select specific services to be made available. In order to be able to overwrite the value of this value by a configuration property, this parameter must be declared. If the parameter is not declared, the respective declaration attribute will not be generated </td>
</tr>
<tr>
<td class='confluenceTd'> bind </td>
<td class='confluenceTd'> See description </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>reference.bind</tt> </td>
<td class='confluenceTd'> The name of the method to be called when the service is to be bound to the component. The default value is the name created by appending the reference <tt>name</tt> to the string <tt>bind</tt>. The method must be declared <tt>public</tt> or <tt>protected</tt> and take single argument which is declared with the service interface type </td>
</tr>
<tr>
<td class='confluenceTd'> unbind </td>
<td class='confluenceTd'> See description </td>
<td class='confluenceTd'> no </td>
<td class='confluenceTd'> <tt>reference.unbind</tt> </td>
<td class='confluenceTd'> The name of the method to be called when the service is to be unbound from the component. The default value is the name created by appending the reference <tt>name</tt> to the string <tt>unbind</tt>. The method must be declared <tt>public</tt> or <tt>protected</tt> and take single argument which is declared with the service interface type </td>
</tr>
<tr>
<td class='confluenceTd'> strategy </td>
<td class='confluenceTd'> <tt>event</tt> </td>
<td class='confluenceTd'> no </td>
<th class='confluenceTh'> <tt>reference.</tt> </th>
<td class='confluenceTd'> The strategy used for this reference, one of <tt>event</tt> or <tt>lookup</tt> </td>
</tr>
</tbody></table>

<p><em>Notes</em>:</p>
<ul>
	<li>If you define a reference on a field with the strategy <tt>event</tt> and there is no bind or unbind method, the plugin will create the necessary methods.</li>
</ul>


<p>.h2 Differences between JavaDoc tags and annotations</p>

<p>In general both mechanisms provide the same functionality. There are some subtle difference which are listed in this section:</p>
<ul>
	<li>While the <tt>metatype</tt> flag is turned on by default for the JavaDoc tags, the default for the annotations is to generate no metadata. The reason for this is, that it turned out that services with metadata are less often used.</li>
	<li>The JavaDoc support adds properties and references from super classes if the source is in the same module to a component even if the super class does not have the <tt>@scr.component</tt> tag. With the annotations the super class is required to have the <tt>Component</tt> annotation.</li>
	<li>Property values are handled differently. While the JavaDoc version has an auto detection of types together with an explicit type parameter, the annotations version has several attributes. Each type has its own attribute (like <tt>shortValue</tt>, <tt>intValue</tt> and so on). This is because of a limitation in the Java annotations which only allow typed parameters.</li>
</ul>
</div>


</td></tr></table></div>
<p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
        <td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="http://cwiki.apache.org/confluence/images/border/spacer.gif" width="1" height="1" border="0"/></td>
    </tr>
</table>

<div class="smalltext">
    Powered by
    <a href="http://www.atlassian.com/software/confluence/default.jsp?clicked=footer" class="smalltext">Atlassian Confluence</a>
    (Version: 2.2.9 Build:#527 Sep 07, 2006)
    -
    <a href="http://jira.atlassian.com/secure/BrowseProject.jspa?id=10470" class="smalltext">Bug/feature request</a><br/>
    <br>
    <a href="http://cwiki.apache.org/confluence/users/viewnotifications.action">Unsubscribe or edit your notifications preferences</a>

</div>

</body>
</html>


Mime
View raw message