Bug 575311: [build] upgrade tycho and jarsigner

Change-Id: Ib4b448e96ec33f0c4088feb1db03a810745ce015
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..b9e927e
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,47 @@
+# Community Code of Conduct
+
+**Version 1.2
+August 19, 2020**
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as community members, contributors, committers, and project leaders pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a professional setting
+
+## Our Responsibilities
+
+With the support of the Eclipse Foundation staff (the “Staff”), project committers and leaders are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
+
+Project committers and leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the Eclipse Foundation project or its community in public spaces. Examples of representing a project or community include posting via an official social media account, or acting as a project representative at an online or offline event. Representation of a project may be further defined and clarified by project committers, leaders, or the EMO.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the Staff at codeofconduct@eclipse.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The Staff is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
+
+Project committers or leaders who do not follow the Code of Conduct in good faith may face temporary or permanent repercussions as determined by the Staff.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..4200f14
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,49 @@
+<!--- https://www.eclipse.org/security/ --->
+_ISO 27005 defines vulnerability as:
+ "A weakness of an asset or group of assets that can be exploited by one or more threats."_
+
+## The Eclipse Security Team
+
+The Eclipse Security Team provides help and advice to Eclipse projects
+on vulnerability issues and is the first point of contact
+for handling security vulnerabilities.
+Members of the Security Team are committers on Eclipse Projects
+and members of the Eclipse Architecture Council.
+
+Contact the [Eclipse Security Team](mailto:security@eclipse.org).
+
+**Note that, as a matter of policy, the security team does not open attachments.**
+
+## Reporting a Security Vulnerability
+
+Vulnerabilities can be reported either via email to the Eclipse Security Team
+or directly with a project via the Eclipse Foundation's Bugzilla instance.
+
+The general security mailing list address is security@eclipse.org.
+Members of the Eclipse Security Team will receive messages sent to this address.
+This address should be used only for reporting undisclosed vulnerabilities;
+regular issue reports and questions unrelated to vulnerabilities in Eclipse software
+will be ignored.
+Note that this email address is not encrypted.
+
+The community is also encouraged to report vulnerabilities using the
+[Eclipse Foundation's Bugzilla instance](https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community&component=Vulnerability%20Reports&keywords=security&groups=Security_Advisories).
+Note that you will require an Eclipse Foundation account to create an issue report,
+but by doing so you will be able to participate directly in the resolution of the issue.
+
+Issue reports related to vulnerabilities must be marked as "committers-only",
+either automatically by clicking the provided link, by the reporter,
+or by a committer during the triage process.
+Note that issues marked "committers-only" are visible to all Eclipse committers.
+By default, a "committers-only" issue is also accessible to the reporter
+and individuals explicitly indicated in the "cc" list.
+
+## Disclosure
+
+Disclosure is initially limited to the reporter and all Eclipse Committers,
+but is expanded to include other individuals, and the general public.
+The timing and manner of disclosure is governed by the
+[Eclipse Security Policy](https://www.eclipse.org/security/policy.php).
+
+Publicly disclosed issues are listed on the
+[Disclosed Vulnerabilities Page](https://www.eclipse.org/security/known.php).
diff --git a/features/org.eclipse.skills.feature/pom.xml b/features/org.eclipse.skills.feature/pom.xml
index 0259bba..7c3e7f0 100644
--- a/features/org.eclipse.skills.feature/pom.xml
+++ b/features/org.eclipse.skills.feature/pom.xml
@@ -7,8 +7,8 @@
 	
 	<parent>
 		<groupId>org.eclipse.skills</groupId>
-		<artifactId>org.eclipse.skills.releng</artifactId>
+		<artifactId>org.eclipse.skills.features</artifactId>
 		<version>0.1.0-SNAPSHOT</version>
-		<relativePath>../../releng/org.eclipse.skills.releng</relativePath>
+		<relativePath>..</relativePath>
 	</parent>
 </project>
\ No newline at end of file
diff --git a/features/org.eclipse.skills.sdk.feature/pom.xml b/features/org.eclipse.skills.sdk.feature/pom.xml
index ff91539..5bc3bfb 100644
--- a/features/org.eclipse.skills.sdk.feature/pom.xml
+++ b/features/org.eclipse.skills.sdk.feature/pom.xml
@@ -7,8 +7,8 @@
 	
 	<parent>
 		<groupId>org.eclipse.skills</groupId>
-		<artifactId>org.eclipse.skills.releng</artifactId>
+		<artifactId>org.eclipse.skills.features</artifactId>
 		<version>0.1.0-SNAPSHOT</version>
-		<relativePath>../../releng/org.eclipse.skills.releng</relativePath>
+		<relativePath>..</relativePath>
 	</parent>
 </project>
\ No newline at end of file
diff --git a/features/pom.xml b/features/pom.xml
new file mode 100644
index 0000000..0f1c340
--- /dev/null
+++ b/features/pom.xml
@@ -0,0 +1,54 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<name>Skills Features</name>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.eclipse.skills.features</artifactId>
+	<version>0.1.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<parent>
+		<groupId>org.eclipse.skills</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<artifactId>org.eclipse.skills.releng</artifactId>
+		<relativePath>../releng/org.eclipse.skills.releng</relativePath>
+	</parent>
+
+	<build>
+		<plugins>
+			<!-- enable source feature generation -->
+			<plugin>
+				<groupId>org.eclipse.tycho.extras</groupId>
+				<artifactId>tycho-source-feature-plugin</artifactId>
+				<version>${tycho.extras.version}</version>
+
+				<executions>
+					<execution>
+						<id>source-feature</id>
+						<phase>package</phase>
+						<goals>
+							<goal>source-feature</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-p2-plugin</artifactId>
+				<version>${tycho.version}</version>
+				<executions>
+					<execution>
+						<id>attached-p2-metadata</id>
+						<phase>package</phase>
+						<goals>
+							<goal>p2-metadata</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>  
\ No newline at end of file
diff --git a/plugins/org.eclipse.skills.dependencies/.classpath b/plugins/org.eclipse.skills.dependencies/.classpath
index eca7bdb..43b9862 100644
--- a/plugins/org.eclipse.skills.dependencies/.classpath
+++ b/plugins/org.eclipse.skills.dependencies/.classpath
@@ -3,5 +3,5 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.eclipse.skills.dependencies/pom.xml b/plugins/org.eclipse.skills.dependencies/pom.xml
index 248b54e..75a273e 100644
--- a/plugins/org.eclipse.skills.dependencies/pom.xml
+++ b/plugins/org.eclipse.skills.dependencies/pom.xml
@@ -4,11 +4,11 @@
 	<modelVersion>4.0.0</modelVersion>
 	<artifactId>org.eclipse.skills.dependencies</artifactId>
 	<packaging>eclipse-plugin</packaging>
-	
+
 	<parent>
-		<relativePath>../../releng/org.eclipse.skills.releng/pom.xml</relativePath>
 		<groupId>org.eclipse.skills</groupId>
-		<artifactId>org.eclipse.skills.releng</artifactId>
+		<artifactId>org.eclipse.skills.plugins</artifactId>
 		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>..</relativePath>
 	</parent>
 </project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.skills.ui.questeditor/.classpath b/plugins/org.eclipse.skills.ui.questeditor/.classpath
index f0c5549..4ff52d4 100644
--- a/plugins/org.eclipse.skills.ui.questeditor/.classpath
+++ b/plugins/org.eclipse.skills.ui.questeditor/.classpath
@@ -4,5 +4,5 @@
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src-gen"/>
-	<classpathentry kind="output" path="bin"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.eclipse.skills.ui.questeditor/pom.xml b/plugins/org.eclipse.skills.ui.questeditor/pom.xml
index 9210950..8751ca6 100644
--- a/plugins/org.eclipse.skills.ui.questeditor/pom.xml
+++ b/plugins/org.eclipse.skills.ui.questeditor/pom.xml
@@ -5,11 +5,12 @@
 	<artifactId>org.eclipse.skills.ui.questeditor</artifactId>
 	
 	<parent>
-		<relativePath>../../releng/org.eclipse.skills.releng/pom.xml</relativePath>
 		<groupId>org.eclipse.skills</groupId>
-		<artifactId>org.eclipse.skills.releng</artifactId>
+		<artifactId>org.eclipse.skills.plugins</artifactId>
 		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>..</relativePath>
 	</parent>
+
 	<packaging>eclipse-plugin</packaging>
 
 	<build>
diff --git a/plugins/org.eclipse.skills/.classpath b/plugins/org.eclipse.skills/.classpath
index 2534a14..6723d21 100644
--- a/plugins/org.eclipse.skills/.classpath
+++ b/plugins/org.eclipse.skills/.classpath
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src-gen"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.eclipse.skills/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.skills/.settings/org.eclipse.jdt.core.prefs
index 64e8545..7004b85 100644
--- a/plugins/org.eclipse.skills/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.skills/.settings/org.eclipse.jdt.core.prefs
@@ -11,17 +11,21 @@
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
 org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
@@ -29,19 +33,22 @@
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
@@ -130,11 +137,12 @@
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
@@ -165,6 +173,8 @@
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
 org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
@@ -189,13 +199,17 @@
 org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
@@ -243,6 +257,8 @@
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
@@ -279,9 +295,12 @@
 org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
@@ -317,9 +336,13 @@
 org.eclipse.jdt.core.formatter.tabulation.size=4
 org.eclipse.jdt.core.formatter.use_on_off_tags=true
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
 org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/plugins/org.eclipse.skills/META-INF/MANIFEST.MF b/plugins/org.eclipse.skills/META-INF/MANIFEST.MF
index 8a81425..9e5a7fe 100644
--- a/plugins/org.eclipse.skills/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.skills/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-Version: 0.1.0.qualifier

 Bundle-ClassPath: .

 Bundle-Vendor: Eclipse.org

-Bundle-RequiredExecutionEnvironment: JavaSE-1.8

+Bundle-RequiredExecutionEnvironment: JavaSE-11

 Export-Package: org.eclipse.skills,

  org.eclipse.skills.dependencies,

  org.eclipse.skills.model,

diff --git a/plugins/org.eclipse.skills/pom.xml b/plugins/org.eclipse.skills/pom.xml
index 780475c..1605b58 100644
--- a/plugins/org.eclipse.skills/pom.xml
+++ b/plugins/org.eclipse.skills/pom.xml
@@ -5,11 +5,12 @@
 	<artifactId>org.eclipse.skills</artifactId>
 
 	<parent>
-		<relativePath>../../releng/org.eclipse.skills.releng/pom.xml</relativePath>
 		<groupId>org.eclipse.skills</groupId>
-		<artifactId>org.eclipse.skills.releng</artifactId>
+		<artifactId>org.eclipse.skills.plugins</artifactId>
 		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>..</relativePath>
 	</parent>
+
 	<packaging>eclipse-plugin</packaging>
 
 	<build>
diff --git a/plugins/org.eclipse.skills/src/org/eclipse/skills/service/StringReplacer.java b/plugins/org.eclipse.skills/src/org/eclipse/skills/service/StringReplacer.java
index 701cf54..5c47df8 100644
--- a/plugins/org.eclipse.skills/src/org/eclipse/skills/service/StringReplacer.java
+++ b/plugins/org.eclipse.skills/src/org/eclipse/skills/service/StringReplacer.java
@@ -14,19 +14,23 @@
 package org.eclipse.skills.service;
 
 import java.util.Map;
+import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class StringReplacer {
+public final class StringReplacer {
 
-	private static Pattern WILDCARD_PATTERN = Pattern.compile("\\$\\{(.*?)\\}");
+	@Deprecated
+	private StringReplacer() {
+		throw new IllegalArgumentException("Contructor not meant to be called");
+	}
+
+	private static final Pattern WILDCARD_PATTERN = Pattern.compile("\\$\\{(.*?)\\}");
 
 	public static String replace(String data, Map<String, String> replacements) {
 		if (data != null) {
 			final Matcher matcher = WILDCARD_PATTERN.matcher(data);
-			data = matcher.replaceAll(matchResult -> getReplacement(matchResult.group(1), replacements));
-
-			return data.trim();
+			return matcher.replaceAll(matchResult -> getReplacement(matchResult.group(1), replacements)).trim();
 		}
 
 		return data;
@@ -34,6 +38,6 @@
 
 	private static String getReplacement(String key, Map<String, String> replacements) {
 		final String candidate = (replacements != null) ? replacements.get(key) : "";
-		return (candidate != null) ? candidate : "";
+		return Objects.requireNonNullElseGet(candidate, () -> "");
 	}
 }
diff --git a/plugins/pom.xml b/plugins/pom.xml
new file mode 100644
index 0000000..1e3a6ea
--- /dev/null
+++ b/plugins/pom.xml
@@ -0,0 +1,122 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<name>Skills Plug-ins</name>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.eclipse.skills.plugins</artifactId>
+	<version>0.1.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<parent>
+		<groupId>org.eclipse.skills</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<artifactId>org.eclipse.skills.releng</artifactId>
+		<relativePath>../releng/org.eclipse.skills.releng</relativePath>
+	</parent>
+
+	<build>
+		<plugins>
+
+			<!-- enable PMD code analysis -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+				<version>${maven.pmd.version}</version>
+				<configuration>
+					<linkXRef>false</linkXRef>
+					<rulesets>../../releng/org.eclipse.skills.releng/pmd/pmd_rules.xml</rulesets>
+				</configuration>
+
+				<executions>
+					<execution>
+						<id>pmd-integration</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>pmd</goal>
+							<goal>cpd</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<!-- enable spotbugs code analysis -->
+			<plugin>
+				<groupId>com.github.spotbugs</groupId>
+				<artifactId>spotbugs-maven-plugin</artifactId>
+				<version>${maven.spotbugs.version}</version>
+
+				<configuration>
+					<effort>Max</effort>
+					<threshold>Low</threshold>
+					<fork>false</fork>
+
+					<excludeFilterFile>../../releng/org.eclipse.skills.releng/spotbugs/spotbugs_filter.xml</excludeFilterFile>
+				</configuration>
+
+				<executions>
+					<execution>
+						<id>spotbugs-integration</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>spotbugs</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<!-- enable checkstyle code analysis -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-checkstyle-plugin</artifactId>
+				<version>${maven.checkstyle.version}</version>
+				<configuration>
+					<configLocation>../../releng/org.eclipse.skills.releng/checkstyle/checkstyle_rules.xml</configLocation>
+					<linkXRef>false</linkXRef>
+				</configuration>
+
+				<executions>
+					<execution>
+						<id>checkstyle-integration</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>check</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<!-- enable source feature generation -->
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+				<version>${tycho.version}</version>
+
+				<executions>
+					<execution>
+						<id>plugin-source</id>
+						<goals>
+							<goal>plugin-source</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-p2-plugin</artifactId>
+				<version>${tycho.version}</version>
+				<executions>
+					<execution>
+						<id>attached-p2-metadata</id>
+						<phase>package</phase>
+						<goals>
+							<goal>p2-metadata</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>  
diff --git a/releng/org.eclipse.skills.releng.target/org.eclipse.skills.releng.target.target b/releng/org.eclipse.skills.releng.target/org.eclipse.skills.releng.target.target
index 70fced4..9d7e262 100644
--- a/releng/org.eclipse.skills.releng.target/org.eclipse.skills.releng.target.target
+++ b/releng/org.eclipse.skills.releng.target/org.eclipse.skills.releng.target.target
@@ -1,23 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="2020-06" sequenceNumber="1601447166">
+<target name="2020-09" sequenceNumber="1628517161">
   <locations>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="org.eclipse.platform.feature.group" version="4.17.0.v20200902-1800"/>
-      <unit id="org.eclipse.rcp.feature.group" version="4.17.0.v20200902-1800"/>
-      <unit id="org.eclipse.jdt.feature.group" version="3.18.500.v20200902-1800"/>
+      <unit id="org.eclipse.platform.feature.group" version="4.20.0.v20210611-1600"/>
+      <unit id="org.eclipse.rcp.feature.group" version="4.20.0.v20210611-1600"/>
+      <unit id="org.eclipse.jdt.feature.group" version="3.18.800.v20210611-1600"/>
       <unit id="org.eclipse.mylyn.commons.feature.group" version="3.25.2.v20200813-0821"/>
-      <unit id="org.eclipse.emf.feature.group" version="2.23.0.v20200822-0801"/>
-      <unit id="org.eclipse.emf.ecp.emfforms.sdk.feature.feature.group" version="1.25.0.20200831-0551"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.jupiter.api" version="5.6.0.v20200203-2009"/>
-      <repository id="eclipse-2020-09" location="http://download.eclipse.org/releases/2020-09/"/>
+      <unit id="org.eclipse.emf.feature.group" version="2.26.0.v20210506-1425"/>
+      <unit id="org.eclipse.emf.ecp.emfforms.sdk.feature.feature.group" version="1.26.0.20210308-0858"/>
+      <repository id="eclipse-2021-06" location="http://download.eclipse.org/releases/2021-06/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="org.mockito" version="1.9.5.v201605172210"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
-      <repository id="eclipse-orbit-2020-09" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20200831200620/repository/"/>
+      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
+      <repository id="eclipse-orbit-2021-06" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
     </location>
   </locations>
 </target>
diff --git a/releng/org.eclipse.skills.releng.target/org.eclipse.skills.releng.target.tpd b/releng/org.eclipse.skills.releng.target/org.eclipse.skills.releng.target.tpd
index 5995b6e..959409d 100644
--- a/releng/org.eclipse.skills.releng.target/org.eclipse.skills.releng.target.tpd
+++ b/releng/org.eclipse.skills.releng.target/org.eclipse.skills.releng.target.tpd
@@ -1,6 +1,6 @@
-target "2020-06" with source requirements
+target "2020-09" with source requirements
 
-location "http://download.eclipse.org/releases/2020-09/" eclipse-2020-09 {
+location "http://download.eclipse.org/releases/2021-06/" eclipse-2021-06 {
 	org.eclipse.platform.feature.group
 	org.eclipse.rcp.feature.group
 	org.eclipse.jdt.feature.group
@@ -11,14 +11,9 @@
 	
 	// questeditor
 	org.eclipse.emf.ecp.emfforms.sdk.feature.feature.group
-	
-	// junit
-	org.junit
-	org.junit.jupiter.api
 }
 
-location "https://download.eclipse.org/tools/orbit/downloads/drops/R20200831200620/repository/" eclipse-orbit-2020-09 {
+location "https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository" eclipse-orbit-2021-06 {
 	// needed for unit tests
-	org.mockito [1.9.5,2.0.0)
-	org.hamcrest [1.1.0,2.0.0)
+	org.mockito [2.13.0,3.0.0)
 }
diff --git a/releng/org.eclipse.skills.releng/checkstyle/checkstyle_rules.xml b/releng/org.eclipse.skills.releng/checkstyle/checkstyle_rules.xml
index 894e448..ab8bcad 100644
--- a/releng/org.eclipse.skills.releng/checkstyle/checkstyle_rules.xml
+++ b/releng/org.eclipse.skills.releng/checkstyle/checkstyle_rules.xml
@@ -1,219 +1,125 @@
-<?xml version="1.0"?>
-<!DOCTYPE module PUBLIC
-          "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
-          "https://checkstyle.org/dtds/configuration_1_3.dtd">
-
-<!--
-
-  Checkstyle configuration that checks the sun coding conventions from:
-
-    - the Java Language Specification at
-      https://docs.oracle.com/javase/specs/jls/se11/html/index.html
-
-    - the Sun Code Conventions at https://www.oracle.com/java/technologies/javase/codeconventions-contents.html
-
-    - the Javadoc guidelines at
-      https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html
-
-    - the JDK Api documentation https://docs.oracle.com/en/java/javase/11/
-
-    - some best practices
-
-  Checkstyle is very configurable. Be sure to read the documentation at
-  https://checkstyle.org (or in your downloaded distribution).
-
-  Most Checks are configurable, be sure to consult the documentation.
-
-  To completely disable a check, just comment it out or delete it from the file.
-  To suppress certain violations please review suppression filters.
-
-  Finally, it is worth reading the documentation.
-
--->
-
-<module name="Checker">
-  <!--
-      If you set the basedir property below, then all reported file
-      names will be relative to the specified directory. See
-      https://checkstyle.org/config.html#Checker
-
-      <property name="basedir" value="${basedir}"/>
-  -->
-  <!--  
-  -->
-  <property name="severity" value="warning"/>
-
-  <property name="fileExtensions" value="java, properties, xml"/>
-
-  <!-- Excludes all 'module-info.java' files              -->
-  <!-- See https://checkstyle.org/config_filefilters.html -->
-  <module name="BeforeExecutionExclusionFileFilter">
-    <property name="fileNamePattern" value="module\-info\.java$"/>
-  </module>
-
-  <!-- https://checkstyle.org/config_filters.html#SuppressionFilter -->
-  <module name="SuppressionFilter">
-    <property name="file" value="checkstyle-suppressions.xml"
-              default="checkstyle-suppressions.xml" />
-    <property name="optional" value="true"/>
-  </module>
-
-  <!-- Checks that a package-info.java file exists for each package.     -->
-  <!-- See https://checkstyle.org/config_javadoc.html#JavadocPackage -->
-  <!-- 
-  <module name="JavadocPackage"/>
-   -->
-
-  <!-- Checks whether files end with a new line.                        -->
-  <!-- See https://checkstyle.org/config_misc.html#NewlineAtEndOfFile -->
-  <module name="NewlineAtEndOfFile"/>
-
-  <!-- Checks that property files contain the same keys.         -->
-  <!-- See https://checkstyle.org/config_misc.html#Translation -->
-  <module name="Translation"/>
-
-  <!-- Checks for Size Violations.                    -->
-  <!-- See https://checkstyle.org/config_sizes.html -->
-  <module name="FileLength"/>
-  <!-- 
-  <module name="LineLength">
-    <property name="fileExtensions" value="java"/>
-    <property name="max" value="140"/>
-  </module>
-   -->
-
-  <!-- Checks for whitespace                               -->
-  <!-- See https://checkstyle.org/config_whitespace.html -->
-  <!-- 
-  <module name="FileTabCharacter"/>
-   -->
-
-  <!-- Miscellaneous other checks.                   -->
-  <!-- See https://checkstyle.org/config_misc.html -->
-  <module name="RegexpSingleline">
-    <property name="format" value="\s+$"/>
-    <property name="minimum" value="0"/>
-    <property name="maximum" value="0"/>
-    <property name="message" value="Line has trailing spaces."/>
-  </module>
-
-  <!-- Checks for Headers                                -->
-  <!-- See https://checkstyle.org/config_header.html   -->
-  <!-- <module name="Header"> -->
-  <!--   <property name="headerFile" value="${checkstyle.header.file}"/> -->
-  <!--   <property name="fileExtensions" value="java"/> -->
-  <!-- </module> -->
-
-  <module name="TreeWalker">
-
-    <!-- Checks for Javadoc comments.                     -->
-    <!-- See https://checkstyle.org/config_javadoc.html -->
-    <module name="InvalidJavadocPosition"/>
-    <module name="JavadocMethod"/>
-    <module name="JavadocType"/>
-    <!-- 
-    <module name="JavadocVariable"/>
-     -->
-    <module name="JavadocStyle"/>
-<!-- 
-    <module name="MissingJavadocMethod"/>
- -->
-
-    <!-- Checks for Naming Conventions.                  -->
-    <!-- See https://checkstyle.org/config_naming.html -->
-    <module name="ConstantName"/>
-    <module name="LocalFinalVariableName"/>
-    <module name="LocalVariableName"/>
-    <module name="MemberName"/>
-    <module name="MethodName"/>
-    <module name="PackageName"/>
-    <module name="ParameterName"/>
-    <module name="StaticVariableName"/>
-    <module name="TypeName"/>
-
-    <!-- Checks for imports                              -->
-    <!-- See https://checkstyle.org/config_imports.html -->
-    <module name="AvoidStarImport"/>
-    <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
-    <module name="RedundantImport"/>
-    <module name="UnusedImports">
-      <property name="processJavadoc" value="false"/>
-    </module>
-
-    <!-- Checks for Size Violations.                    -->
-    <!-- See https://checkstyle.org/config_sizes.html -->
-    <module name="MethodLength"/>
-    <module name="ParameterNumber"/>
-
-    <!-- Checks for whitespace                               -->
-    <!-- See https://checkstyle.org/config_whitespace.html -->
-    <module name="EmptyForIteratorPad"/>
-    <module name="GenericWhitespace"/>
-    <module name="MethodParamPad"/>
-    <module name="NoWhitespaceAfter"/>
-    <module name="NoWhitespaceBefore"/>
-    <module name="OperatorWrap"/>
-    <module name="ParenPad"/>
-    <module name="TypecastParenPad"/>
-    <module name="WhitespaceAfter"/>
-    <module name="WhitespaceAround"/>
-
-    <!-- Modifier Checks                                    -->
-    <!-- See https://checkstyle.org/config_modifiers.html -->
-    <module name="ModifierOrder"/>
-    <module name="RedundantModifier"/>
-
-    <!-- Checks for blocks. You know, those {}'s         -->
-    <!-- See https://checkstyle.org/config_blocks.html -->
-    <module name="AvoidNestedBlocks"/>
-    <module name="EmptyBlock"/>
-    <module name="LeftCurly"/>
-    <!-- 
-    <module name="NeedBraces"/>
-     -->
-    <module name="RightCurly"/>
-
-    <!-- Checks for common coding problems               -->
-    <!-- See https://checkstyle.org/config_coding.html -->
-    <module name="EmptyStatement"/>
-    <module name="EqualsHashCode"/>
-    <module name="HiddenField"/>
-    <module name="IllegalInstantiation"/>
-    <module name="InnerAssignment"/>
-    <!-- 
-    <module name="MagicNumber"/>
-     -->
-    <module name="MissingSwitchDefault"/>
-    <module name="MultipleVariableDeclarations"/>
-    <module name="SimplifyBooleanExpression"/>
-    <module name="SimplifyBooleanReturn"/>
-
-    <!-- Checks for class design                         -->
-    <!-- See https://checkstyle.org/config_design.html -->
-	<!-- 
-    <module name="DesignForExtension"/>
-	 -->
-    <module name="FinalClass"/>
-    <module name="HideUtilityClassConstructor"/>
-    <module name="InterfaceIsType"/>
-    <module name="VisibilityModifier"/>
-
-    <!-- Miscellaneous other checks.                   -->
-    <!-- See https://checkstyle.org/config_misc.html -->
-    <module name="ArrayTypeStyle"/>
-    <!-- 
-    <module name="FinalParameters"/>
-     -->
-    <module name="TodoComment"/>
-    <module name="UpperEll"/>
-
-    <!-- https://checkstyle.org/config_filters.html#SuppressionXpathFilter -->
-    <module name="SuppressionXpathFilter">
-      <property name="file" value="checkstyle-xpath-suppressions.xml"
-                default="checkstyle-xpath-suppressions.xml" />
-      <property name="optional" value="true"/>
-    </module>
-
-  </module>
-
+<?xml version="1.0"?>

+<!DOCTYPE module PUBLIC

+          "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"

+          "https://checkstyle.org/dtds/configuration_1_3.dtd">

+

+<!-- Skills Plug-in rules. Based on sun ruleset. -->

+

+<module name="Checker">

+	<property name="severity" value="warning" />

+

+	<property name="charset" value="UTF-8" />

+	<property name="fileExtensions" value="java, properties, xml" />

+

+	<!-- Checks whether files end with a new line. -->

+	<!-- See https://checkstyle.org/config_misc.html#NewlineAtEndOfFile -->

+	<module name="NewlineAtEndOfFile" />

+

+	<!-- Checks for Size Violations. -->

+	<!-- See https://checkstyle.org/config_sizes.html -->

+	<module name="FileLength" />

+

+	<!-- Miscellaneous other checks. -->

+	<!-- See https://checkstyle.org/config_misc.html -->

+	<module name="RegexpSingleline">

+		<property name="format" value="\s+$" />

+		<property name="minimum" value="0" />

+		<property name="maximum" value="0" />

+		<property name="message" value="Line has trailing spaces." />

+	</module>

+

+	<module name="TreeWalker">

+

+		<!-- Checks for Javadoc comments. -->

+		<!-- See https://checkstyle.org/config_javadoc.html -->

+		<module name="InvalidJavadocPosition" />

+		<module name="JavadocMethod" />

+		<module name="JavadocType" />

+		<module name="JavadocStyle" />

+

+		<!-- Checks for Naming Conventions. -->

+		<!-- See https://checkstyle.org/config_naming.html -->

+		<module name="ConstantName" />

+		<module name="LocalFinalVariableName" />

+		<module name="LocalVariableName" />

+		<module name="MemberName">

+			<property name="format" value="^f[a-zA-Z0-9]*$" />

+		</module>

+		<module name="MethodName" />

+		<module name="PackageName" />

+		<module name="ParameterName" />

+		<module name="StaticVariableName" />

+		<module name="TypeName" />

+

+		<!-- Checks for imports -->

+		<!-- See https://checkstyle.org/config_imports.html -->

+		<module name="AvoidStarImport" />

+		<module name="IllegalImport" /> <!-- defaults to sun.* packages -->

+		<module name="RedundantImport" />

+		<module name="UnusedImports">

+			<property name="processJavadoc" value="false" />

+		</module>

+

+		<!-- Checks for Size Violations. -->

+		<!-- See https://checkstyle.org/config_sizes.html -->

+		<module name="MethodLength" />

+		<module name="ParameterNumber" />

+

+		<!-- Checks for whitespace -->

+		<!-- See https://checkstyle.org/config_whitespace.html -->

+		<module name="EmptyForIteratorPad" />

+		<module name="GenericWhitespace" />

+		<module name="MethodParamPad" />

+		<module name="NoWhitespaceAfter">

+			<property name="tokens" value="AT,INC,DEC,UNARY_MINUS,UNARY_PLUS,BNOT,LNOT,DOT,ARRAY_DECLARATOR,INDEX_OP,METHOD_REF" />

+			<property name="allowLineBreaks" value="false" />

+		</module>

+		<module name="NoWhitespaceBefore" />

+		<module name="OperatorWrap" />

+		<module name="ParenPad" />

+		<module name="TypecastParenPad" />

+		<module name="WhitespaceAfter" />

+		<module name="WhitespaceAround" />

+

+		<!-- Modifier Checks -->

+		<!-- See https://checkstyle.org/config_modifiers.html -->

+		<module name="ModifierOrder" />

+		<module name="RedundantModifier" />

+

+		<!-- Checks for blocks. You know, those {}'s -->

+		<!-- See https://checkstyle.org/config_blocks.html -->

+		<module name="AvoidNestedBlocks" />

+		<module name="EmptyBlock" />

+		<module name="LeftCurly" />

+		<!-- <module name="NeedBraces"/> -->

+		<module name="RightCurly" />

+

+		<!-- Checks for common coding problems -->

+		<!-- See https://checkstyle.org/config_coding.html -->

+		<module name="EmptyStatement" />

+		<module name="EqualsHashCode" />

+		<module name="HiddenField" />

+		<module name="IllegalInstantiation" />

+		<module name="InnerAssignment" />

+		<!-- <module name="MagicNumber"/> -->

+		<module name="MissingSwitchDefault" />

+		<module name="MultipleVariableDeclarations" />

+		<module name="SimplifyBooleanExpression" />

+		<module name="SimplifyBooleanReturn" />

+

+		<!-- Checks for class design -->

+		<!-- See https://checkstyle.org/config_design.html -->

+		<!-- <module name="DesignForExtension"/> -->

+		<module name="FinalClass" />

+		<module name="HideUtilityClassConstructor" />

+		<module name="InterfaceIsType" />

+		<module name="VisibilityModifier" />

+

+		<!-- Miscellaneous other checks. -->

+		<!-- See https://checkstyle.org/config_misc.html -->

+		<module name="ArrayTypeStyle" />

+		<!-- <module name="FinalParameters"/> -->

+		<module name="TodoComment" />

+		<module name="UpperEll" />

+	</module>

 </module>
\ No newline at end of file
diff --git a/releng/org.eclipse.skills.releng/checkstyle/checkstyle_rules_unittest.xml b/releng/org.eclipse.skills.releng/checkstyle/checkstyle_rules_unittest.xml
new file mode 100644
index 0000000..22ec8c1
--- /dev/null
+++ b/releng/org.eclipse.skills.releng/checkstyle/checkstyle_rules_unittest.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0"?>

+<!DOCTYPE module PUBLIC

+          "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"

+          "https://checkstyle.org/dtds/configuration_1_3.dtd">

+

+<!-- Skills Plug-in rules. Based on sun ruleset. -->

+

+<module name="Checker">

+	<property name="severity" value="warning" />

+

+	<property name="charset" value="UTF-8" />

+	<property name="fileExtensions" value="java, properties, xml" />

+

+	<!-- Checks whether files end with a new line. -->

+	<!-- See https://checkstyle.org/config_misc.html#NewlineAtEndOfFile -->

+	<module name="NewlineAtEndOfFile" />

+

+	<!-- Checks for Size Violations. -->

+	<!-- See https://checkstyle.org/config_sizes.html -->

+	<module name="FileLength" />

+

+	<!-- Miscellaneous other checks. -->

+	<!-- See https://checkstyle.org/config_misc.html -->

+	<module name="RegexpSingleline">

+		<property name="format" value="\s+$" />

+		<property name="minimum" value="0" />

+		<property name="maximum" value="0" />

+		<property name="message" value="Line has trailing spaces." />

+	</module>

+

+

+

+	<module name="TreeWalker">

+

+		<!-- Checks for Javadoc comments. -->

+		<!-- See https://checkstyle.org/config_javadoc.html -->

+		<module name="InvalidJavadocPosition" />

+		<module name="JavadocMethod" />

+		<module name="JavadocType" />

+		<module name="JavadocStyle" />

+

+		<!-- Checks for Naming Conventions. -->

+		<!-- See https://checkstyle.org/config_naming.html -->

+		<module name="ConstantName" />

+		<module name="LocalFinalVariableName" />

+		<module name="LocalVariableName">

+			<property name="format" value="^[a-z][a-zA-Z0-9_]*$" />

+		</module>

+		<module name="MemberName">

+			<property name="format" value="^f[a-zA-Z0-9]*$" />

+		</module>

+		<module name="MethodName">

+			<property name="format" value="^[a-z][a-zA-Z0-9_]*$" />

+		</module>

+		<module name="PackageName" />

+		<module name="ParameterName" />

+		<module name="StaticVariableName" />

+		<module name="TypeName" />

+

+		<!-- Checks for imports -->

+		<!-- See https://checkstyle.org/config_imports.html -->

+		<module name="AvoidStarImport" />

+		<module name="IllegalImport" /> <!-- defaults to sun.* packages -->

+		<module name="RedundantImport" />

+		<module name="UnusedImports">

+			<property name="processJavadoc" value="false" />

+		</module>

+

+		<!-- Checks for Size Violations. -->

+		<!-- See https://checkstyle.org/config_sizes.html -->

+		<module name="MethodLength" />

+		<module name="ParameterNumber" />

+

+		<!-- Checks for whitespace -->

+		<!-- See https://checkstyle.org/config_whitespace.html -->

+		<module name="EmptyForIteratorPad" />

+		<module name="GenericWhitespace" />

+		<module name="MethodParamPad" />

+		<module name="NoWhitespaceAfter">

+			<property name="tokens" value="AT,INC,DEC,UNARY_MINUS,UNARY_PLUS,BNOT,LNOT,DOT,ARRAY_DECLARATOR,INDEX_OP,METHOD_REF" />

+			<property name="allowLineBreaks" value="false" />

+		</module>

+		<module name="NoWhitespaceBefore" />

+		<module name="OperatorWrap" />

+		<module name="ParenPad" />

+		<module name="TypecastParenPad" />

+		<module name="WhitespaceAfter" />

+		<module name="WhitespaceAround" />

+

+		<!-- Modifier Checks -->

+		<!-- See https://checkstyle.org/config_modifiers.html -->

+		<module name="ModifierOrder" />

+		<module name="RedundantModifier" />

+

+		<!-- Checks for blocks. You know, those {}'s -->

+		<!-- See https://checkstyle.org/config_blocks.html -->

+		<module name="AvoidNestedBlocks" />

+		<module name="EmptyBlock" />

+		<module name="LeftCurly" />

+		<!-- <module name="NeedBraces"/> -->

+		<module name="RightCurly" />

+

+		<!-- Checks for common coding problems -->

+		<!-- See https://checkstyle.org/config_coding.html -->

+		<module name="EmptyStatement" />

+		<module name="EqualsHashCode" />

+		<module name="HiddenField" />

+		<module name="IllegalInstantiation" />

+		<module name="InnerAssignment" />

+		<!-- <module name="MagicNumber"/> -->

+		<module name="MissingSwitchDefault" />

+		<module name="MultipleVariableDeclarations" />

+		<module name="SimplifyBooleanExpression" />

+		<module name="SimplifyBooleanReturn" />

+

+		<!-- Checks for class design -->

+		<!-- See https://checkstyle.org/config_design.html -->

+		<!-- <module name="DesignForExtension"/> -->

+		<module name="FinalClass" />

+		<module name="HideUtilityClassConstructor" />

+		<module name="InterfaceIsType" />

+		<module name="VisibilityModifier" />

+

+		<!-- Miscellaneous other checks. -->

+		<!-- See https://checkstyle.org/config_misc.html -->

+		<module name="ArrayTypeStyle" />

+		<!-- <module name="FinalParameters"/> -->

+		<module name="TodoComment" />

+		<module name="UpperEll" />

+	</module>

+</module>

diff --git a/releng/org.eclipse.skills.releng/pmd/pmd_rules.xml b/releng/org.eclipse.skills.releng/pmd/pmd_rules.xml
index b683bbe..fe4c211 100644
--- a/releng/org.eclipse.skills.releng/pmd/pmd_rules.xml
+++ b/releng/org.eclipse.skills.releng/pmd/pmd_rules.xml
@@ -1,85 +1,116 @@
-<?xml version="1.0"?>
-
-<ruleset name="Custom Rules"
-	xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">
-
-	<description>
-        Eclipse Skills PMD rules
-    </description>
-
-	<exclude-pattern>.*/org/eclipse/skills/model/.*</exclude-pattern>
-
-	<rule ref="category/java/bestpractices.xml">
-		<!-- Skills logger takes care of guarding -->
-		<exclude name="GuardLogStatement" />
-	</rule>
-
-	<rule ref="category/java/codestyle.xml">
-		<!-- Allow non final method arguments -->
-		<exclude name="MethodArgumentCouldBeFinal" />
-
-		<!-- Fields can be defined after static methods -->
-		<exclude name="FieldDeclarationsShouldBeAtStartOfClass" />
-
-		<!-- Allow to use single line blocks without {} -->
-		<exclude name="IfStmtsMustUseBraces" />
-		<exclude name="IfElseStmtsMustUseBraces" />
-		<exclude name="ForLoopsMustUseBraces" />
-		<exclude name="WhileLoopsMustUseBraces" />
-		<exclude name="ControlStatementBraces" />
-
-		<!-- Allow additional () for readability -->
-		<exclude name="UselessParentheses" />
-
-		<!-- Allow more than one return statement in a method -->
-		<exclude name="OnlyOneReturn" />
-
-		<!-- Do not require to call super() in constructor -->
-		<exclude name="CallSuperInConstructor" />
-
-		<!-- Do not require a default constructor -->
-		<exclude name="AtLeastOneConstructor" />
-
-		<!-- Allow variable names -->
-		<exclude name="ShortVariable" />
-		<exclude name="LongVariable" />
-	</rule>
-
-	<rule ref="category/java/codestyle.xml/ClassNamingConventions">
-		<properties>
-			<property name="utilityClassPattern"
-				value="[A-Z][a-zA-Z0-9]+" />
-		</properties>
-	</rule>
-
-	<rule ref="category/java/design.xml">
-		<exclude name="LawOfDemeter" />
-
-		<!-- needs detailed configuration to work, otherwise fails in maven -->
-		<exclude name="LoosePackageCoupling" />
-	</rule>
-
-	<rule ref="category/java/documentation.xml">
-		<exclude name="CommentRequired" />
-		<exclude name="CommentSize" />
-
-		<!-- Allow empty constructors without documentation -->
-		<exclude name="UncommentedEmptyConstructor" />
-	</rule>
-
-	<rule ref="category/java/errorprone.xml">
-		<exclude name="BeanMembersShouldSerialize" />
-	
-		<!-- fails in maven build, see https://github.com/pmd/pmd/issues/873 -->
-		<exclude name="DataflowAnomalyAnalysis" />
-	</rule>
-
-	<rule ref="category/java/multithreading.xml" />
-
-	<rule ref="category/java/performance.xml" />
-
-	<rule ref="category/java/security.xml" />
-
+<?xml version="1.0"?>

+

+<ruleset name="Custom Rules"

+	xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"

+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+	xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">

+

+	<description>

+        Skills PMD rules

+    </description>

+

+	<!-- see https://pmd.github.io/latest/pmd_rules_java.html for available 

+		rules -->

+

+	<rule ref="category/java/bestpractices.xml">

+		<!-- Skills logger takes care of guarding -->

+		<exclude name="GuardLogStatement" />

+		

+		<!-- Not each assert requires a message -->

+		<exclude name="JUnitAssertionsShouldIncludeMessage" />

+

+		<!-- More than 1 assert allowed in tests -->

+		<exclude name="JUnitTestContainsTooManyAsserts" />

+	</rule>

+

+	<rule ref="category/java/codestyle.xml">

+		<!-- Allow non final method arguments -->

+		<exclude name="MethodArgumentCouldBeFinal" />

+

+		<!-- Fields can be defined after static methods -->

+		<exclude name="FieldDeclarationsShouldBeAtStartOfClass" />

+

+		<!-- Allow to use single line blocks without {} -->

+		<exclude name="IfStmtsMustUseBraces" />

+		<exclude name="IfElseStmtsMustUseBraces" />

+		<exclude name="ForLoopsMustUseBraces" />

+		<exclude name="WhileLoopsMustUseBraces" />

+		<exclude name="ControlStatementBraces" />

+

+		<!-- Allow additional () for readability -->

+		<exclude name="UselessParentheses" />

+

+		<!-- Allow more than one return statement in a method -->

+		<exclude name="OnlyOneReturn" />

+

+		<!-- Do not require to call super() in constructor -->

+		<exclude name="CallSuperInConstructor" />

+

+		<!-- Do not require a default constructor -->

+		<exclude name="AtLeastOneConstructor" />

+

+		<!-- Allow variable names -->

+		<exclude name="ShortVariable" />

+		<exclude name="LongVariable" />

+

+		<!-- Allow class names shorter than 5 characters -->

+		<exclude name="ShortClassName" />

+	</rule>

+

+	<rule ref="category/java/codestyle.xml/ClassNamingConventions">

+		<properties>

+			<property name="utilityClassPattern"

+				value="[A-Z][a-zA-Z0-9]+" />

+		</properties>

+	</rule>

+

+	<rule ref="category/java/design.xml">

+		<exclude name="LawOfDemeter" />

+

+		<!-- needs detailed configuration to work, otherwise fails in maven -->

+		<exclude name="LoosePackageCoupling" />

+	</rule>

+

+	<rule ref="category/java/documentation.xml">

+		<exclude name="CommentRequired" />

+		<exclude name="CommentSize" />

+

+		<!-- Allow empty constructors without documentation -->

+		<exclude name="UncommentedEmptyConstructor" />

+	</rule>

+

+	<rule ref="category/java/errorprone.xml">

+		<exclude name="BeanMembersShouldSerialize" />

+

+		<!-- fails in maven build, see https://github.com/pmd/pmd/issues/873 -->

+		<exclude name="DataflowAnomalyAnalysis" />

+	</rule>

+

+	<rule ref="category/java/errorprone.xml/EmptyCatchBlock">

+		<properties>

+			<property name="allowCommentedBlocks" value="true" />

+		</properties>

+	</rule>

+

+	<rule ref="category/java/multithreading.xml">

+		<!-- ConcurrentHashMap is slower. Use only where needed -->

+		<exclude name="UseConcurrentHashMap" />

+

+		<!-- only makes sense in the context of JavaEE -->

+		<exclude name="DoNotUseThreads" />

+	</rule>

+

+	<rule ref="category/java/performance.xml">

+		<!-- prefer having initializers for explicit code readability -->

+		<exclude name="RedundantFieldInitializer" />

+

+		<!-- sacrifice performance for improved code readability -->

+		<exclude name="ConsecutiveAppendsShouldReuse" />

+

+		<!-- instantiating objects in loops is actually fine, see https://stackoverflow.com/questions/17340421/pmd-avoid-instantiating-new-objects-inside-loops -->

+		<exclude name="AvoidInstantiatingObjectsInLoops" />

+	</rule>

+

+	<rule ref="category/java/security.xml" />

+

 </ruleset>
\ No newline at end of file
diff --git a/releng/org.eclipse.skills.releng/pmd/pmd_rules_unittest.xml b/releng/org.eclipse.skills.releng/pmd/pmd_rules_unittest.xml
new file mode 100644
index 0000000..2f55270
--- /dev/null
+++ b/releng/org.eclipse.skills.releng/pmd/pmd_rules_unittest.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0"?>

+

+<ruleset name="Custom Rules"

+	xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"

+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+	xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">

+

+	<description>

+        Skills Unittest PMD rules

+    </description>

+

+	<!-- see https://pmd.github.io/latest/pmd_rules_java.html for available 

+		rules -->

+

+	<!-- exclude pattern work on the target folder, so only packages can be 

+		used -->

+

+	<rule ref="category/java/bestpractices.xml">

+		<!-- Skills logger takes care of guarding -->

+		<exclude name="GuardLogStatement" />

+

+		<!-- Not each assert requires a message -->

+		<exclude name="JUnitAssertionsShouldIncludeMessage" />

+

+		<!-- More than 1 assert allowed in tests -->

+		<exclude name="JUnitTestContainsTooManyAsserts" />

+

+		<!-- JUnit 5 tests should be package private -->

+		<exclude name="JUnit5TestShouldBePackagePrivate" />

+	</rule>

+

+	<rule ref="category/java/codestyle.xml">

+		<!-- Allow non final method arguments -->

+		<exclude name="MethodArgumentCouldBeFinal" />

+

+		<!-- Fields can be defined after static methods -->

+		<exclude name="FieldDeclarationsShouldBeAtStartOfClass" />

+

+		<!-- Allow to use single line blocks without {} -->

+		<exclude name="IfStmtsMustUseBraces" />

+		<exclude name="IfElseStmtsMustUseBraces" />

+		<exclude name="ForLoopsMustUseBraces" />

+		<exclude name="WhileLoopsMustUseBraces" />

+		<exclude name="ControlStatementBraces" />

+

+		<!-- Allow additional () for readability -->

+		<exclude name="UselessParentheses" />

+

+		<!-- Allow more than one return statement in a method -->

+		<exclude name="OnlyOneReturn" />

+

+		<!-- Do not require to call super() in constructor -->

+		<exclude name="CallSuperInConstructor" />

+

+		<!-- Do not require a default constructor -->

+		<exclude name="AtLeastOneConstructor" />

+

+		<!-- Allow variable names -->

+		<exclude name="ShortVariable" />

+		<exclude name="LongVariable" />

+

+		<!-- Allow class names shorter than 5 characters -->

+		<exclude name="ShortClassName" />

+

+		<!-- Allow static imports for JUnit and mocking -->

+		<exclude name="TooManyStaticImports" />

+	</rule>

+

+	<rule ref="category/java/codestyle.xml/ClassNamingConventions">

+		<properties>

+			<property name="utilityClassPattern"

+				value="[A-Z][a-zA-Z0-9]+" />

+		</properties>

+	</rule>

+

+	<!-- test methods typically start with the method name they check. This 

+		does not state anything about the test methods return value -->

+	<rule ref="category/java/codestyle.xml/LinguisticNaming">

+		<properties>

+			<property name="ignoredAnnotations"

+				value="java.lang.Override" />

+			<property name="checkBooleanMethod" value="false" />

+			<property name="checkGetters" value="false" />

+			<property name="checkSetters" value="false" />

+			<property name="checkPrefixedTransformMethods" value="false" />

+			<property name="checkTransformMethods" value="false" />

+			<property name="booleanMethodPrefixes" value="false" />

+			<property name="transformMethodNames" value="false" />

+		</properties>

+	</rule>

+

+	<rule ref="category/java/codestyle.xml/MethodNamingConventions">

+    	<properties>

+	        <property name="methodPattern" value="[a-z][a-zA-Z0-9]*" />

+    	    <property name="staticPattern" value="[a-z][a-zA-Z0-9]*" />

+        	<property name="nativePattern" value="[a-z][a-zA-Z0-9]*" />

+	        <property name="junit3TestPattern" value="test[A-Z0-9][a-zA-Z0-9_]*" />

+    	    <property name="junit4TestPattern" value="[a-z][a-zA-Z0-9_]*" />

+        	<property name="junit5TestPattern" value="[a-z][a-zA-Z0-9_]*" />

+    	</properties>

+	</rule>

+

+	<rule ref="category/java/design.xml">

+		<exclude name="LawOfDemeter" />

+

+		<!-- needs detailed configuration to work, otherwise fails in maven -->

+		<exclude name="LoosePackageCoupling" />

+	</rule>

+

+	<rule ref="category/java/documentation.xml">

+		<exclude name="CommentRequired" />

+		<exclude name="CommentSize" />

+

+		<!-- Allow empty constructors without documentation -->

+		<exclude name="UncommentedEmptyConstructor" />

+	</rule>

+

+	<rule ref="category/java/errorprone.xml">

+		<exclude name="BeanMembersShouldSerialize" />

+

+		<!-- fails in maven build, see https://github.com/pmd/pmd/issues/873 -->

+		<exclude name="DataflowAnomalyAnalysis" />

+	</rule>

+

+	<rule ref="category/java/errorprone.xml/EmptyCatchBlock">

+		<properties>

+			<property name="allowCommentedBlocks" value="true" />

+		</properties>

+	</rule>

+

+	<rule ref="category/java/multithreading.xml">

+		<!-- ConcurrentHashMap is slower. Use only where needed -->

+		<exclude name="UseConcurrentHashMap" />

+

+		<!-- only makes sense in the context of JavaEE -->

+		<exclude name="DoNotUseThreads" />

+	</rule>

+

+	<rule ref="category/java/performance.xml">

+		<!-- prefer having initializers for explicit code readability -->

+		<exclude name="RedundantFieldInitializer" />

+

+		<!-- sacrifice performance for improved code readability -->

+		<exclude name="ConsecutiveAppendsShouldReuse" />

+

+		<!-- instantiating objects in loops is actually fine, see https://stackoverflow.com/questions/17340421/pmd-avoid-instantiating-new-objects-inside-loops -->

+		<exclude name="AvoidInstantiatingObjectsInLoops" />

+	</rule>

+

+	<rule ref="category/java/security.xml" />

+

+</ruleset>
\ No newline at end of file
diff --git a/releng/org.eclipse.skills.releng/pom.xml b/releng/org.eclipse.skills.releng/pom.xml
index c365dde..1bfff5a 100644
--- a/releng/org.eclipse.skills.releng/pom.xml
+++ b/releng/org.eclipse.skills.releng/pom.xml
@@ -7,40 +7,32 @@
 	<version>0.1.0-SNAPSHOT</version>
 	<packaging>pom</packaging>
 
+	<prerequisites>
+		<!-- Maven 3.1.0 is the earliest version using Eclipse Aether, Maven 3.0.x 
+			uses the incompatible predecessor Sonatype Aether -->
+		<maven>3.6.3</maven>
+	</prerequisites>
+
 	<properties>
 		<!-- used plugin versions -->
-		<tycho.version>1.5.0</tycho.version>
+		<tycho.version>2.2.0</tycho.version>
 		<tycho.extras.version>${tycho.version}</tycho.extras.version>
 		<maven.compiler.version>3.6.1</maven.compiler.version>
-		<maven.javadoc.version>2.9.1</maven.javadoc.version>
+		<maven.javadoc.version>3.1.0</maven.javadoc.version>
 		<jacoco.version>0.8.6</jacoco.version>
-		<eclipse.jarsigner.version>1.1.3</eclipse.jarsigner.version>
+		<eclipse.jarsigner.version>1.3.2</eclipse.jarsigner.version>
 		<maven.buildhelper.version>1.9.1</maven.buildhelper.version>
-		<maven.pmd.version>3.13.0</maven.pmd.version>
-		<maven.spotbugs.version>4.1.4</maven.spotbugs.version>
+		<maven.pmd.version>3.14.0</maven.pmd.version>
 		<maven.checkstyle.version>3.1.1</maven.checkstyle.version>
+		<maven.spotbugs.version>4.1.4</maven.spotbugs.version>
 
 		<!-- build parameters -->
 		<compiler.compliance>1.8</compiler.compliance>
-		<jacoco.report.path>../../coverage-report/jacoco.exec</jacoco.report.path>
-
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 	</properties>
 
 
-	<pluginRepositories>
-		<pluginRepository>
-			<id>cbi</id>
-			<url>https://repo.eclipse.org/content/repositories/cbi-releases/</url>
-		</pluginRepository>
-		<pluginRepository>
-			<id>nexus</id>
-			<url>https://repo.eclipse.org/content/repositories/maven_central/</url>
-		</pluginRepository>
-	</pluginRepositories>
-
 	<modules>
-
 		<!-- plugins -->
 		<module>../../plugins/org.eclipse.skills</module>
 		<module>../../plugins/org.eclipse.skills.dependencies</module>
@@ -58,124 +50,22 @@
 		<module>../org.eclipse.skills.releng.target</module>
 		<module>../org.eclipse.skills.releng.p2</module>
 		<module>../org.eclipse.skills.releng.coverage</module>
-
 	</modules>
 
+	<pluginRepositories>
+		<pluginRepository>
+			<id>cbi</id>
+			<url>https://repo.eclipse.org/content/repositories/cbi-releases/</url>
+		</pluginRepository>
+		<pluginRepository>
+			<id>nexus</id>
+			<url>https://repo.eclipse.org/content/repositories/maven_central/</url>
+		</pluginRepository>
+	</pluginRepositories>
+
 
 	<build>
 		<plugins>
-			<!-- require minimum maven version -->
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-enforcer-plugin</artifactId>
-				<version>3.0.0-M3</version>
-				<executions>
-					<execution>
-						<id>enforce-maven</id>
-						<goals>
-							<goal>enforce</goal>
-						</goals>
-						<configuration>
-							<rules>
-								<requireMavenVersion>
-									<version>3.6.0</version>
-								</requireMavenVersion>
-							</rules>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-
-			<!-- enable PMD code analysis -->
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-pmd-plugin</artifactId>
-				<version>${maven.pmd.version}</version>
-				<configuration>
-					<linkXRef>false</linkXRef>
-					<excludeRoots>
-						<excludeRoot>src-gen</excludeRoot>
-					</excludeRoots>
-					<rulesets>../../releng/org.eclipse.skills.releng/pmd/pmd_rules.xml</rulesets>
-				</configuration>
-
-				<executions>
-					<execution>
-						<id>pmd-integration</id>
-						<phase>verify</phase>
-						<goals>
-							<goal>pmd</goal>
-							<goal>cpd</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-
-			<!-- enable checkstyle code analysis -->
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-checkstyle-plugin</artifactId>
-				<version>${maven.checkstyle.version}</version>
-				<configuration>
-					<configLocation>../../releng/org.eclipse.skills.releng/checkstyle/checkstyle_rules.xml</configLocation>
-					<linkXRef>false</linkXRef>
-				</configuration>
-
-				<executions>
-					<execution>
-						<id>checkstyle-integration</id>
-						<phase>verify</phase>
-						<goals>
-							<goal>check</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-
-			<!-- enable spotbugs code analysis -->
-			<plugin>
-				<groupId>com.github.spotbugs</groupId>
-				<artifactId>spotbugs-maven-plugin</artifactId>
-				<version>${maven.spotbugs.version}</version>
-
-				<configuration>
-					<effort>Max</effort>
-					<threshold>Low</threshold>
-					<fork>false</fork>
-				</configuration>
-
-				<executions>
-					<execution>
-						<id>spotbugs-integration</id>
-						<phase>verify</phase>
-						<goals>
-							<goal>spotbugs</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-
-			<!-- enable JaCoCo code coverage -->
-			<plugin>
-				<groupId>org.jacoco</groupId>
-				<artifactId>jacoco-maven-plugin</artifactId>
-				<version>${jacoco.version}</version>
-
-				<configuration>
-					<output>file</output>
-				</configuration>
-
-				<executions>
-					<execution>
-						<id>jacoco-initialize</id>
-						<phase>pre-integration-test</phase>
-						<goals>
-							<goal>prepare-agent</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-
 			<!-- enable tycho build extension -->
 			<plugin>
 				<groupId>org.eclipse.tycho</groupId>
@@ -235,13 +125,6 @@
 				</configuration>
 			</plugin>
 
-			<!-- enable pom version updates: to update execute goal "tycho.versions:update-pom" -->
-			<plugin>
-				<groupId>org.eclipse.tycho</groupId>
-				<artifactId>tycho-versions-plugin</artifactId>
-				<version>${tycho.version}</version>
-			</plugin>
-
 			<!-- timestamps based on the latest git commit -->
 			<plugin>
 				<groupId>org.eclipse.tycho</groupId>
@@ -263,62 +146,11 @@
 					<format>${build-prefix}yyyyMMddHHmm</format>
 				</configuration>
 			</plugin>
-
-			<!-- enable source feature generation -->
-			<plugin>
-				<groupId>org.eclipse.tycho.extras</groupId>
-				<artifactId>tycho-source-feature-plugin</artifactId>
-				<version>${tycho.extras.version}</version>
-
-				<executions>
-					<execution>
-						<id>source-feature</id>
-						<phase>package</phase>
-						<goals>
-							<goal>source-feature</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-
-			<plugin>
-				<groupId>org.eclipse.tycho</groupId>
-				<artifactId>tycho-source-plugin</artifactId>
-				<version>${tycho.version}</version>
-
-				<executions>
-					<execution>
-						<id>plugin-source</id>
-						<goals>
-							<goal>plugin-source</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-
-			<plugin>
-				<groupId>org.eclipse.tycho</groupId>
-				<artifactId>tycho-p2-plugin</artifactId>
-				<version>${tycho.version}</version>
-				<executions>
-					<execution>
-						<id>attached-p2-metadata</id>
-						<phase>package</phase>
-						<goals>
-							<goal>p2-metadata</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
 		</plugins>
 	</build>
 
 	<profiles>
 		<profile>
-			<id>local</id>
-		</profile>
-
-		<profile>
 			<!-- by default set build qualifier to "I" -->
 			<activation>
 				<activeByDefault>true</activeByDefault>
@@ -333,32 +165,6 @@
 		</profile>
 
 		<profile>
-			<!-- apply filter when filter file exists -->
-			<id>auto-spotbugs-exclude</id>
-			<activation>
-				<file>
-					<exists>.settings/spotbugs-exclude.xml</exists>
-				</file>
-			</activation>
-
-
-			<build>
-				<plugins>
-					<!-- enable spotbugs exclude filter -->
-					<plugin>
-						<groupId>com.github.spotbugs</groupId>
-						<artifactId>spotbugs-maven-plugin</artifactId>
-						<version>${maven.spotbugs.version}</version>
-
-						<configuration>
-							<excludeFilterFile>.settings/spotbugs-exclude.xml</excludeFilterFile>
-						</configuration>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-
-		<profile>
 			<id>sign</id>
 
 			<build>
diff --git a/releng/org.eclipse.skills.releng/spotbugs/spotbugs_filter.xml b/releng/org.eclipse.skills.releng/spotbugs/spotbugs_filter.xml
new file mode 100644
index 0000000..47750b1
--- /dev/null
+++ b/releng/org.eclipse.skills.releng/spotbugs/spotbugs_filter.xml
@@ -0,0 +1,14 @@
+<FindBugsFilter>

+

+    <!-- Ignore generated code -->

+    <Match>

+        <Or>

+            <Package name="org.eclipse.skills.model.*"/>

+        </Or>

+    </Match>

+

+    <!-- Ignore spotbugs reports from incomplete detectors -->

+    <Match>

+        <Bug pattern="TESTING"/>

+    </Match>

+</FindBugsFilter>
\ No newline at end of file
diff --git a/releng/org.eclipse.skills.releng/spotbugs/spotbugs_filter_unittest.xml b/releng/org.eclipse.skills.releng/spotbugs/spotbugs_filter_unittest.xml
new file mode 100644
index 0000000..bd7d3ff
--- /dev/null
+++ b/releng/org.eclipse.skills.releng/spotbugs/spotbugs_filter_unittest.xml
@@ -0,0 +1,27 @@
+<FindBugsFilter>

+

+    <!-- Ignore generated code -->

+    <Match>

+        <Or>

+        <!-- 

+        	<Class name="org.eclipse.skills..."/>

+            <Package name="org.eclipse.skills..."/>

+         -->

+        </Or>

+    </Match>

+

+    <!-- Ignore spotbugs reports from incomplete detectors -->

+    <Match>

+        <Bug pattern="TESTING"/>

+    </Match>

+

+    <!-- Ignore initialization warnings in Unit Tests. We typically initialize in beforeEach() -->

+    <Match>

+        <Bug pattern="UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR"/>

+    </Match>

+    

+    <!-- Ignore default encoding when converting byte[] / String -->

+    <Match>

+        <Bug pattern="DM_DEFAULT_ENCODING"/>

+    </Match>

+</FindBugsFilter>
\ No newline at end of file
diff --git a/tests/org.eclipse.skills.dependencies.test/.classpath b/tests/org.eclipse.skills.dependencies.test/.classpath
index 3e5654f..a621c21 100644
--- a/tests/org.eclipse.skills.dependencies.test/.classpath
+++ b/tests/org.eclipse.skills.dependencies.test/.classpath
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src">
 		<attributes>
 			<attribute name="test" value="true"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/tests/org.eclipse.skills.dependencies.test/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.skills.dependencies.test/.settings/org.eclipse.jdt.core.prefs
index 64e8545..7004b85 100644
--- a/tests/org.eclipse.skills.dependencies.test/.settings/org.eclipse.jdt.core.prefs
+++ b/tests/org.eclipse.skills.dependencies.test/.settings/org.eclipse.jdt.core.prefs
@@ -11,17 +11,21 @@
 org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
 org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
@@ -29,19 +33,22 @@
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
@@ -130,11 +137,12 @@
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
@@ -165,6 +173,8 @@
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
 org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
@@ -189,13 +199,17 @@
 org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
@@ -243,6 +257,8 @@
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
@@ -279,9 +295,12 @@
 org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
@@ -317,9 +336,13 @@
 org.eclipse.jdt.core.formatter.tabulation.size=4
 org.eclipse.jdt.core.formatter.use_on_off_tags=true
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
 org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/tests/org.eclipse.skills.dependencies.test/META-INF/MANIFEST.MF b/tests/org.eclipse.skills.dependencies.test/META-INF/MANIFEST.MF
index 8a163af..d7196b4 100644
--- a/tests/org.eclipse.skills.dependencies.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.skills.dependencies.test/META-INF/MANIFEST.MF
@@ -6,6 +6,6 @@
 Bundle-Vendor: Eclipse.org
 Fragment-Host: org.eclipse.skills.dependencies;bundle-version="0.1.0"
 Automatic-Module-Name: org.eclipse.skills.dependencies.test
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.junit,
- org.junit.jupiter.api
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Require-Bundle: org.junit.jupiter.api,
+ org.mockito
diff --git a/tests/org.eclipse.skills.dependencies.test/pom.xml b/tests/org.eclipse.skills.dependencies.test/pom.xml
index da08c1e..6e00d9c 100644
--- a/tests/org.eclipse.skills.dependencies.test/pom.xml
+++ b/tests/org.eclipse.skills.dependencies.test/pom.xml
@@ -6,18 +6,18 @@
 	<packaging>eclipse-test-plugin</packaging>
 
 	<parent>
-		<relativePath>../../releng/org.eclipse.skills.releng/pom.xml</relativePath>
 		<groupId>org.eclipse.skills</groupId>
-		<artifactId>org.eclipse.skills.releng</artifactId>
+		<artifactId>org.eclipse.skills.tests</artifactId>
 		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>..</relativePath>
 	</parent>
 
 	<build>
 		<plugins>
 			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.22.2</version>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-surefire-plugin</artifactId>
+				<version>${tycho.version}</version>
 				<configuration>
 					<excludes>
 						<exclude>**/BrokerEventDependencyTest*</exclude>
diff --git a/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/BrokerEventDependencyTest.java b/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/BrokerEventDependencyTest.java
index 502cd3a..12ef6c1 100644
--- a/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/BrokerEventDependencyTest.java
+++ b/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/BrokerEventDependencyTest.java
@@ -13,9 +13,8 @@
 
 package org.eclipse.skills.dependencies;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -49,7 +48,6 @@
 	@Disabled
 	public void setup() {
 		fDependency = new BrokerEventDependency();
-		assumeTrue(hasBroker());
 	}
 
 	@Test
diff --git a/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/ConsolePatternDependencyTest.java b/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/ConsolePatternDependencyTest.java
index a0ada59..41cce88 100644
--- a/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/ConsolePatternDependencyTest.java
+++ b/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/ConsolePatternDependencyTest.java
@@ -13,10 +13,10 @@
 
 package org.eclipse.skills.dependencies;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.eclipse.jface.text.DocumentEvent;
 import org.junit.jupiter.api.BeforeEach;
diff --git a/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/P2DependencyTest.java b/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/P2DependencyTest.java
index 54a3788..e7f0277 100644
--- a/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/P2DependencyTest.java
+++ b/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/P2DependencyTest.java
@@ -13,8 +13,8 @@
 
 package org.eclipse.skills.dependencies;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/ResourceExistsDependencyTest.java b/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/ResourceExistsDependencyTest.java
index 608844c..417de18 100644
--- a/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/ResourceExistsDependencyTest.java
+++ b/tests/org.eclipse.skills.dependencies.test/src/org/eclipse/skills/dependencies/ResourceExistsDependencyTest.java
@@ -13,8 +13,8 @@
 
 package org.eclipse.skills.dependencies;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
 
diff --git a/tests/org.eclipse.skills.test/.classpath b/tests/org.eclipse.skills.test/.classpath
index 3e5654f..f193818 100644
--- a/tests/org.eclipse.skills.test/.classpath
+++ b/tests/org.eclipse.skills.test/.classpath
@@ -7,5 +7,5 @@
 			<attribute name="test" value="true"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="output" path="bin"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/tests/org.eclipse.skills.test/META-INF/MANIFEST.MF b/tests/org.eclipse.skills.test/META-INF/MANIFEST.MF
index 5019701..585853a 100644
--- a/tests/org.eclipse.skills.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.skills.test/META-INF/MANIFEST.MF
@@ -7,8 +7,6 @@
 Fragment-Host: org.eclipse.skills;bundle-version="0.1.0"
 Automatic-Module-Name: org.eclipse.skills.tests
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: org.junit,
- org.junit.jupiter.api,
- org.mockito;bundle-version="[1.9.5,2.0.0)",
- org.hamcrest;bundle-version="1.1.0",
+Require-Bundle: org.junit.jupiter.api,
+ org.mockito,
  org.eclipse.e4.ui.services;bundle-version="1.3.700"
diff --git a/tests/org.eclipse.skills.test/pom.xml b/tests/org.eclipse.skills.test/pom.xml
index dc680ac..cae5ee4 100644
--- a/tests/org.eclipse.skills.test/pom.xml
+++ b/tests/org.eclipse.skills.test/pom.xml
@@ -6,10 +6,10 @@
 	<packaging>eclipse-test-plugin</packaging>
 
 	<parent>
-		<relativePath>../../releng/org.eclipse.skills.releng/pom.xml</relativePath>
 		<groupId>org.eclipse.skills</groupId>
-		<artifactId>org.eclipse.skills.releng</artifactId>
+		<artifactId>org.eclipse.skills.tests</artifactId>
 		<version>0.1.0-SNAPSHOT</version>
+		<relativePath>..</relativePath>
 	</parent>
 
 	<build>
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/BrokerToolsTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/BrokerToolsTest.java
index 76695d7..bc01bcd 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/BrokerToolsTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/BrokerToolsTest.java
@@ -13,7 +13,7 @@
 
 package org.eclipse.skills;
 
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/AndDependencyTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/AndDependencyTest.java
index cc9d033..8efde7c 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/AndDependencyTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/AndDependencyTest.java
@@ -13,7 +13,7 @@
 
 package org.eclipse.skills.model;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/NotDependencyTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/NotDependencyTest.java
index 705ebbc..1997b95 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/NotDependencyTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/NotDependencyTest.java
@@ -13,8 +13,8 @@
 
 package org.eclipse.skills.model;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/SequenceDependencyTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/SequenceDependencyTest.java
index ab53f5a..b7c44e9 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/SequenceDependencyTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/SequenceDependencyTest.java
@@ -13,8 +13,8 @@
 
 package org.eclipse.skills.model;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/SkillTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/SkillTest.java
index 3fb9912..1093ca5 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/SkillTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/SkillTest.java
@@ -13,10 +13,10 @@
 
 package org.eclipse.skills.model;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.junit.jupiter.api.BeforeEach;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/TaskDependencyTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/TaskDependencyTest.java
index 56863be..60472c9 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/TaskDependencyTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/TaskDependencyTest.java
@@ -13,10 +13,10 @@
 
 package org.eclipse.skills.model;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Date;
 
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/TaskTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/TaskTest.java
index 9111824..9c79d96 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/TaskTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/TaskTest.java
@@ -13,8 +13,8 @@
 
 package org.eclipse.skills.model;
 
-import static org.junit.Assert.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/UserTaskTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/UserTaskTest.java
index 6e818af..35f14af 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/UserTaskTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/UserTaskTest.java
@@ -13,10 +13,10 @@
 
 package org.eclipse.skills.model;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Date;
 
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/UserTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/UserTest.java
index c46a19d..e971fb3 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/UserTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/model/UserTest.java
@@ -13,10 +13,10 @@
 
 package org.eclipse.skills.model;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/SkillServiceTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/SkillServiceTest.java
index 9d819d1..58e0199 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/SkillServiceTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/SkillServiceTest.java
@@ -13,11 +13,11 @@
 
 package org.eclipse.skills.service;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/StringReplacerTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/StringReplacerTest.java
index 3b7278a..148c10b 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/StringReplacerTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/StringReplacerTest.java
@@ -13,8 +13,8 @@
 
 package org.eclipse.skills.service;
 
-import static org.junit.Assert.assertNull;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserFactoryTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserFactoryTest.java
index be5b244..3eb23b4 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserFactoryTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserFactoryTest.java
@@ -13,11 +13,11 @@
 
 package org.eclipse.skills.service;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.eclipse.skills.model.ISkill;
 import org.eclipse.skills.model.IUser;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserStorageTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserStorageTest.java
index 870384e..eb4ca25 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserStorageTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserStorageTest.java
@@ -13,10 +13,10 @@
 
 package org.eclipse.skills.service;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserTitleGeneratorTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserTitleGeneratorTest.java
index bf004e0..cf4c396 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserTitleGeneratorTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/UserTitleGeneratorTest.java
@@ -13,8 +13,8 @@
 
 package org.eclipse.skills.service;
 
-import static org.junit.Assert.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.util.Arrays;
 import java.util.Collection;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/questprovider/ExtensionPointQuestProviderTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/questprovider/ExtensionPointQuestProviderTest.java
index 0993107..99af29d 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/questprovider/ExtensionPointQuestProviderTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/questprovider/ExtensionPointQuestProviderTest.java
@@ -13,12 +13,10 @@
 
 package org.eclipse.skills.service.questprovider;
 
-import static org.junit.Assert.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import org.eclipse.skills.model.IQuest;
-import org.eclipse.skills.service.questprovider.ExtensionPointQuestProvider;
-import org.eclipse.skills.service.questprovider.IQuestProvider;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/questprovider/URIQuestProviderTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/questprovider/URIQuestProviderTest.java
index 9418f35..25b957c 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/questprovider/URIQuestProviderTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/questprovider/URIQuestProviderTest.java
@@ -13,7 +13,7 @@
 
 package org.eclipse.skills.service.questprovider;
 
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.skills.model.IQuest;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/storage/AbstractStorageTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/storage/AbstractStorageTest.java
index 6e9b7ee..f28ef0a 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/storage/AbstractStorageTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/storage/AbstractStorageTest.java
@@ -13,10 +13,10 @@
 
 package org.eclipse.skills.service.storage;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
diff --git a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/storage/DataStorageProxyTest.java b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/storage/DataStorageProxyTest.java
index d042adc..a5bdf40 100644
--- a/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/storage/DataStorageProxyTest.java
+++ b/tests/org.eclipse.skills.test/src/org/eclipse/skills/service/storage/DataStorageProxyTest.java
@@ -13,11 +13,11 @@
 
 package org.eclipse.skills.service.storage;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
diff --git a/tests/pom.xml b/tests/pom.xml
new file mode 100644
index 0000000..52d436b
--- /dev/null
+++ b/tests/pom.xml
@@ -0,0 +1,132 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<name>Skills Unit Tests</name>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.eclipse.skills.tests</artifactId>
+	<version>0.1.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<parent>
+		<groupId>org.eclipse.skills</groupId>
+		<version>0.1.0-SNAPSHOT</version>
+		<artifactId>org.eclipse.skills.releng</artifactId>
+		<relativePath>../releng/org.eclipse.skills.releng</relativePath>
+	</parent>
+
+	<build>
+		<plugins>
+			<!-- set JUnit runner to Junit 5 -->
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-surefire-plugin</artifactId>
+				<version>${tycho.version}</version>
+				<configuration>
+					<providerHint>junit57</providerHint>
+					
+					<dependencies>
+						<!-- avoid CNFE in Surefire when looking for JUnitPlatformProvider -->
+						<dependency>
+							<artifactId>org.junit</artifactId>
+							<type>eclipse-plugin</type>
+						</dependency>
+					</dependencies>
+				</configuration>
+				
+			</plugin>
+
+			<!-- enable JaCoCo code coverage -->
+			<plugin>
+				<groupId>org.jacoco</groupId>
+				<artifactId>jacoco-maven-plugin</artifactId>
+				<version>${jacoco.version}</version>
+
+				<configuration>
+					<output>file</output>
+				</configuration>
+
+				<executions>
+					<execution>
+						<id>jacoco-initialize</id>
+						<phase>pre-integration-test</phase>
+						<goals>
+							<goal>prepare-agent</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+
+			<!-- enable PMD code analysis -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+				<version>${maven.pmd.version}</version>
+				<configuration>
+					<linkXRef>false</linkXRef>
+					<rulesets>../../releng/org.eclipse.skills.releng/pmd/pmd_rules_unittest.xml</rulesets>
+				</configuration>
+
+				<executions>
+					<execution>
+						<id>pmd-integration</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>pmd</goal>
+							<goal>cpd</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<!-- enable spotbugs code analysis -->
+			<plugin>
+				<groupId>com.github.spotbugs</groupId>
+				<artifactId>spotbugs-maven-plugin</artifactId>
+				<version>${maven.spotbugs.version}</version>
+
+				<configuration>
+					<effort>Max</effort>
+					<threshold>Low</threshold>
+					<fork>false</fork>
+
+					<excludeFilterFile>../../releng/org.eclipse.skills.releng/spotbugs/spotbugs_filter_unittest.xml</excludeFilterFile>
+				</configuration>
+
+				<executions>
+					<execution>
+						<id>spotbugs-integration</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>spotbugs</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+			<!-- enable checkstyle code analysis -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-checkstyle-plugin</artifactId>
+				<version>${maven.checkstyle.version}</version>
+				<configuration>
+					<configLocation>../../releng/org.eclipse.skills.releng/checkstyle/checkstyle_rules_unittest.xml</configLocation>
+					<linkXRef>false</linkXRef>
+				</configuration>
+
+				<executions>
+					<execution>
+						<id>checkstyle-integration</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>check</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+		</plugins>
+	</build>
+</project>  
\ No newline at end of file