Jump to: navigation, search

Difference between revisions of "DSDP/MTJ/Requirements/MTJ Build"

< DSDP‎ | MTJ‎ | Requirements
(ID: build:FR007 - MTJ shall define an extension point for build hooks)
Line 72: Line 72:
  
 
==='''ID''': build:FR007 - MTJ shall define an extension point for build hooks===
 
==='''ID''': build:FR007 - MTJ shall define an extension point for build hooks===
'''Description:''' An '''''Extension Point''''' where third party plugins can provide build hooks to run before and after the build process.
+
'''Description:''' An '''''Extension Point''''' where SDK providers can extend the build process in order to add SDK specific actions into the build process. The build process is seen by the hooks as a state machine and the hooks are notified on every state transition of the build state machine. The Following states are available for the hooks to attach themselves:
 +
 
 +
<ol>
 +
<li>PRE_BUILD [Before build process starts]</li>
 +
<li>PRE_PREPROCESS [Before preprocessing]</li>
 +
<li>POST_PREPROCESS [After preprocessing]</li>
 +
<li>PRE_LOCALIZATION [Before localization]</li>
 +
<li>POST_LOCALIZATION [After localization]</li>
 +
<li>PRE_COMPILE [Before JDT builder starts]</li>
 +
<li>POST_COMPILE [After JDT builder ends]</li>
 +
<li>PRE_PREVERIFICATION [Before preverifying]</li>
 +
<li>POST_PREVERIFICATION [After preverifying]</li>
 +
<li>POST_BUILD [After build process ends]</li>
 +
</ol>
  
 
The extension point will be composed by the following elements:
 
The extension point will be composed by the following elements:
  
 
*'''build-hook'''
 
*'''build-hook'''
** <font color="green"><b>builder-id</b></font> (identifier Attribute) <font color="#960018"><b>[REQUIRED]</b></font><p>Description: The ID of one extension of the org.eclipse.core.resources.builders extension point.</p>
+
** <font color="green"><b>hook</b></font> (Java Attribute) <font color="#960018"><b>[REQUIRED]</b></font><p>Description: IMTJBuildHook Interface defines a callback method for the hooks to attach to the build process. It must be implemented by the hooks providers.</p>
** <font color="green"><b>sdk-filter</b></font> (String Attribute) <font color="#960018"><b>[REQUIRED]</b></font><p>Description: A regular expression matching the target SDKs names in order to filter the hook usage among all available SDKs.</p>
+
** <font color="green"><b>hook</b></font> (Java Attribute) <font color="#960018"><b>[REQUIRED]</b></font><p>Description: IMTJBuildHook Interface defines methods for pre and pos build operations. It must be implemented by the hooks providers.</p>
+
** <font color="green"><b>priority</b></font> (String Attribute) <font color="#960018"><b>[REQUIRED]</b></font><p>Description: An integer defining the priority order of the hook. It must be a number greater that or equal to zero, the lower numbers means higher priorities.</p>
+
  
 
*'''''Sequence compositor'''''
 
*'''''Sequence compositor'''''
Line 90: Line 100:
 
<extension point="org.eclipse.mtj.core.mtjbuildhook">
 
<extension point="org.eclipse.mtj.core.mtjbuildhook">
 
     <build-hook
 
     <build-hook
          builder-id="org.eclipse.mtj.core.preverifier"
+
           hook="org.eclipse.mtj.core.build.SunBuildHook">
           hook="org.eclipse.mtj.core.build.SunBuildHook"
+
          priority="1"
+
          sdk-filter="Sun.*">
+
 
     </build-hook>
 
     </build-hook>
 
     <build-hook
 
     <build-hook
          builder-id="org.eclipse.mtj.core.l10nBuilder"
+
           hook="org.eclipse.mtj.core.build.MotoBuildHook">
           hook="org.eclipse.mtj.core.build.MotoBuildHook"
+
          priority="5"
+
          sdk-filter=".*">
+
 
     </build-hook>
 
     </build-hook>
 
  </extension>
 
  </extension>
Line 106: Line 110:
 
The example bellow illustrates an IMTJBuildHook Interface implementation:
 
The example bellow illustrates an IMTJBuildHook Interface implementation:
 
<pre>
 
<pre>
//
 
// THIS BUILD HOOK ADDS A README.TXT FROM THE HOOK PROVIDER
 
// INTO A SOURCE FOLDER IN ORDER TO HAVE IT PACKAGED WITH THE
 
// APPLICATION'S JAR FILE DURING BUILD. IT REMOVES THE FILE
 
// RIGHT AFTER THE PACKAGE BUILD HAS FINISHED.
 
//
 
public class SunBuildHook implements IMTJBuildHook {
 
 
private File readme;
 
 
public void preBuild(IMTJProject project, IProgressMonitor _monitor)  throws CoreException {
 
if (!(project instanceof IMidletSuiteProject)) {
 
return;
 
}
 
IMidletSuiteProject suiteProject = (IMidletSuiteProject) project;
 
IFolder src = suiteProject.getJavaProject().getProject().getFolder("src");
 
  
try {
+
public class ExampleBuildHook implements IMTJBuildHook {
readme = new File(src.getLocation().toFile(), "README.TXT");
+
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(readme)));
+
writer.write("Sun Readme...");
+
writer.close();
+
} catch (Exception e) {
+
throw new CoreException(MTJCore.newStatus(IStatus.ERROR, 999, e.getMessage(), e));
+
} finally {
+
src.refreshLocal(IResource.DEPTH_ONE, _monitor);
+
}
+
}
+
  
public void posBuild(IMTJProject project, IProgressMonitor _monitor) throws CoreException {
+
public void buildStateChanged(IMTJProject project, MTJBuildState state, IProgressMonitor monitor) throws CoreException {
if (readme != null) {
+
switch (state) {
readme.delete();
+
case PRE_BUILD:
 +
// Do any action before build
 +
break;
 +
case POST_BUILD:
 +
// Do any action after build
 +
break;
 
}
 
}
 
}
 
}

Revision as of 09:19, 16 April 2009

ID: build:FR001 - MTJ shall provide a MIDP Packing Build Process.

Description: TBD

Priority: 1

Owner: Motorola/Craig Setera

Status: Accepted on 17-June-2008

Community Review: 17-June-2008

ID: build:FR002 - MTJ shall provide an option to setup proguard code obfuscation.

Description: TBD

Priority: 1

Owner: Motorola/Craig Setera

Status: Accepted on 17-June-2008

Community Review: 17-June-2008

ID: build:FR003 - MTJ shall provide an option to setup a signing keystore.

Description: TBD

Priority: 1

Owner: Motorola/Craig Setera

Status: Accepted on 17-June-2008

Community Review: 17-June-2008

ID: build:FR004 - MTJ shall provide an option to build the MIDlet Suite JAR without obfuscation.

Description: TBD

Priority: 1

Owner: Motorola/Craig Setera

Status: Accepted on 17-June-2008

Community Review: 17-June-2008

ID: build:FR005 - MTJ shall provide an option to build an obfuscated MIDlet Suite JAR.

Description: TBD

Priority: 1

Owner: Motorola/Craig Setera

Status: Accepted on 17-June-2008

Community Review: 17-June-2008

ID: build:FR006 - MTJ shall provide an option to export all build process an an antenna build XML file.

Description: TBD

Priority: 1

Owner: Motorola/Craig Setera

Status: Accepted on 17-June-2008

Community Review: 17-June-2008

ID: build:FR007 - MTJ shall define an extension point for build hooks

Description: An Extension Point where SDK providers can extend the build process in order to add SDK specific actions into the build process. The build process is seen by the hooks as a state machine and the hooks are notified on every state transition of the build state machine. The Following states are available for the hooks to attach themselves:

  1. PRE_BUILD [Before build process starts]
  2. PRE_PREPROCESS [Before preprocessing]
  3. POST_PREPROCESS [After preprocessing]
  4. PRE_LOCALIZATION [Before localization]
  5. POST_LOCALIZATION [After localization]
  6. PRE_COMPILE [Before JDT builder starts]
  7. POST_COMPILE [After JDT builder ends]
  8. PRE_PREVERIFICATION [Before preverifying]
  9. POST_PREVERIFICATION [After preverifying]
  10. POST_BUILD [After build process ends]

The extension point will be composed by the following elements:

  • build-hook
    • hook (Java Attribute) [REQUIRED]

      Description: IMTJBuildHook Interface defines a callback method for the hooks to attach to the build process. It must be implemented by the hooks providers.

  • Sequence compositor
    • build-hook (Element reference) (1 - *)
  • Example

The example bellow illustrates an example extension:

<extension point="org.eclipse.mtj.core.mtjbuildhook">
    <build-hook
          hook="org.eclipse.mtj.core.build.SunBuildHook">
    </build-hook>
    <build-hook
          hook="org.eclipse.mtj.core.build.MotoBuildHook">
    </build-hook>
 </extension>

The example bellow illustrates an IMTJBuildHook Interface implementation:


public class ExampleBuildHook implements IMTJBuildHook {

	public void buildStateChanged(IMTJProject project, MTJBuildState state, IProgressMonitor monitor) throws CoreException {
		switch (state) {
			case PRE_BUILD:
				// Do any action before build
			break;
			case POST_BUILD:
				// Do any action after build
			break;
		}
	}
}

Priority: 1

Owner: David Marques

Status: Proposed on 07-Mar-2009

Community Review: TBD

Related Bugs: TBD



Back to main DSDP/MTJ/Requirements