You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Work is underway to create an Ant Task for the generation of Declarative Services and Metatype Service descriptors similar to what is supported for Maven. The goal is to support the same Java 5 Annotations and JavaDoc tags for Ant driven builds as are available for Maven builds.

The description on this page is based on unreleased software which must be built from the Apache Felix trunk. A release will be available shortly.

The SCR Ant Task is implemented in the org.apache.felix.scr.ant library which must be registered as an Ant Task in the build file as follows:

<project ...>

  <taskdef
    resource="scrtask.properties"
    classpath="org.apache.felix.scr.ant-0.0.1-SNAPSHOT.jar" />

</project>

Of course the value you set in the classpath attribute depends on the actual location of the org.apache.felix.scr.ant JAR file.

Notes:

  • The name of the task is scr
  • The task requires that the source files have already been compiled

Like the standard javac Ant Task, the SCR Ant Task defines an implicit fileset which defines the source files to be scanned for Java 5 Annotations or JavaDoc Tags. In addition to the child elements available to Ant Fileset as defined for directory-based tasks the following task attributes:

Attribute

Required

Default

Description

scrdir

Yes

The root directory of the implicitly defined fileset denoting the files to consider for annotation and/or JavaDoc tag processing.

destdir

Yes

The name of the directory where the descriptor files are generated into. This is also used as the directory where the compiled classes from the srcdir may be located. This directory is actually added as another element to the classpath as defined by classpath and classpathRef.

classpath

No

The class path used to load classes from to analyse for the descriptor file generation. Generally this will be the same class path as the one used to compile the sources.

classpathRef

No

A reference to a class path used to load classes from to analyse for the descriptor file generation. Generally this will be the same class path as the one used to compile the sources.

finalName

No

serviceComponents.xml

The name of the descriptor file to create. This file is always located inside the OSGI-INF folder in the destdir.

metaTypeName

No

metatype.xml

The name of the descriptor file to create. This file is always located inside the OSGI-INF/metatype folder in the destdir.

generateAccessors

No

true

If this switch is turned on, the bind and unbind methods for unary references are automatically generated by the plugin.

annotationTagProviders

No

List of fully qualified class names providing more Annotation Tag Providers.

specVersion

No

Auto-Detected

The plugin will generate a descriptor for the Declarative Service version (either 1.0 or 1.1). If no value is specified, the plugin will detect the version and only use 1.1 if features from this version are used.

Example

The following is very simple example build file based on the Apache Sling JCR WebConsole bundle:

<project default="scr" basedir=".">

  <taskdef resource="scrtask.properties"
      classpath="org.apache.felix.scr.ant-0.0.1-SNAPSHOT.jar" />

  <target name="init">
    <property name="src" value="src/main/java" />
    <property name="classes" value="target/classes" />
    <property name="m2Repo" value="${user.home}/.m2/repository" />
    <path id="dependencies">
      <fileset dir="${m2Repo}">
        <include name="javax/jcr/jcr/1.0/jcr-1.0.jar" />
        <include name="org/apache/sling/org.apache.sling.jcr.api/2.0.6/org.apache.sling.jcr.api-2.0.6.jar" />
        <include name="org/apache/felix/org.apache.felix.webconsole/3.0.0/org.apache.felix.webconsole-3.0.0.jar" />
        <include name="javax/servlet/servlet-api/2.4/servlet-api-2.4.jar" />
        <include name="org/apache/felix/org.apache.felix.scr.annotations/1.0.0/org.apache.felix.scr.annotations-1.0.0.jar" />
      </fileset>
    </path>
  </target>

  <target name="compile" depends="init">
      <mkdir dir="${classes}" />
      <javac srcdir="${src}" destdir="${classes}" classpathref="dependencies" />
  </target>

  <target name="scr" depends="compile">
    <scr srcdir="${src}" destdir="${classes}" classpathref="dependencies" />
  </target>

  <target name="clean">
    <delete dir="target" />
  </target>

</project>
  • No labels