[WW-4981] Adds support for JDK11 (#270)

* Upgrades test dependencies

* Drops unused lib

* Uses AssertJ instead of FestAssert

* Upgrades Surefire Maven Plugin to 2.22.1

* Downgrades to AssertJ 2.x to support JDK7

* decouple tests from java version

Refactor a java 9 conditional test to work always with any java version

See also WW-4845

* fix NullPointerException in NotURLClassLoader tests

Also includes a few improvements

See also WW-4845

* do not specify threadCount & forkMode which breaks tests in java 9

See also WW-4845

* pass all current tests with java 11

See also WW-4981

* fix an odd path problem in java 9

See also WW-4845

* gitignore test-output

See also WW-4981

* ask travis an oracle jdk 11 build

See also WW-4981

* ask travis to report coverage only in latest working jdk, jdk8

See also WW-4845
This commit is contained in:
Lukasz Lenart
2018-11-19 08:05:01 +01:00
committed by Yasser Zamani
parent f2ad93a0d6
commit 2a60c1eee6
19 changed files with 243 additions and 220 deletions
+1
View File
@@ -63,3 +63,4 @@ bundles/target
plugins/target
target
plugins/testng/test-output
test-output
+7 -1
View File
@@ -5,12 +5,18 @@ jdk:
- openjdk7
- oraclejdk8
- oraclejdk9
- oraclejdk11
install: true
script: mvn test -DskipAssembly
after_success:
- mvn clean cobertura:cobertura org.eluder.coveralls:coveralls-maven-plugin:report com.updateimpact:updateimpact-maven-plugin:submit -Ptravis-coveralls,update-impact -DskipAssembly
# TODO delete following if statement after fix of https://github.com/cobertura/cobertura/issues/271
- if [ "$TRAVIS_JDK_VERSION" == "openjdk8" ] || [ "$TRAVIS_JDK_VERSION" == "oraclejdk8" ]; then
mvn clean cobertura:cobertura org.eluder.coveralls:coveralls-maven-plugin:report com.updateimpact:updateimpact-maven-plugin:submit -Ptravis-coveralls,update-impact -DskipAssembly
else
echo "Not reporting coverage for $TRAVIS_JDK_VERSION due to incomatibility or to save performance";
fi
env:
global:
+1 -2
View File
@@ -38,9 +38,8 @@
<include>org.apache.commons:commons-lang3</include>
<include>org.apache.logging.log4j:log4j-api</include>
<include>ognl:ognl</include>
<include>org.javassist:javassist</include>
<include>commons-fileupload:commons-fileupload</include>
<include>commons-io:commons-io</include>
<include>org.apache.commons:commons-io</include>
</includes>
</dependencySet>
</dependencySets>
+3 -3
View File
@@ -339,13 +339,13 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert</artifactId>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
@@ -36,158 +36,153 @@ import java.util.zip.ZipInputStream;
/**
* This class is an utility class that will search through the classpath
* for files whose names match the given pattern. The filename is tested
* using the given implementation of {@link com.opensymphony.xwork2.util.PatternMatcher} by default it
* using the given implementation of {@link com.opensymphony.xwork2.util.PatternMatcher} by default it
* uses {@link com.opensymphony.xwork2.util.WildcardHelper}
*/
public class ClassPathFinder {
/**
/**
* The String pattern to test against.
*/
private String pattern ;
private int[] compiledPattern ;
/**
private String pattern;
private int[] compiledPattern;
/**
* The PatternMatcher implementation to use
*/
private PatternMatcher<int[]> patternMatcher = new WildcardHelper();
private PatternMatcher<int[]> patternMatcher = new WildcardHelper();
private Vector<String> compared = new Vector<>();
/**
* @return the pattern in use
*/
public String getPattern() {
return pattern;
}
private Vector<String> compared = new Vector<>();
/**
* @param pattern the String pattern for comparing filenames
*/
public void setPattern(String pattern) {
this.pattern = pattern;
}
/**
* @return the pattern in use
*/
public String getPattern() {
return pattern;
}
/**
/**
* @param pattern the String pattern for comparing filenames
*/
public void setPattern(String pattern) {
this.pattern = pattern;
}
/**
* Builds a {@link java.util.Vector} containing Strings which each name a file
* who's name matches the pattern set by setPattern(String). The classpath is
* who's name matches the pattern set by setPattern(String). The classpath is
* searched recursively, so use with caution.
*
* @return Vector&lt;String&gt; containing matching filenames
*/
public Vector<String> findMatches() {
Vector<String> matches = new Vector<>();
URL[] parentUrls = getClassLoaderURLs();
compiledPattern = patternMatcher.compilePattern(pattern);
for (URL url : parentUrls) {
if (!"file".equals(url.getProtocol())) {
continue ;
}
URI entryURI ;
try {
entryURI = url.toURI();
} catch (URISyntaxException e) {
continue;
}
File entry = new File(entryURI);
if (entry.isFile() && entry.toString().endsWith(".jar")) {
try {
ZipInputStream zip = new ZipInputStream(new FileInputStream(entry));
for (ZipEntry zipEntry = zip.getNextEntry(); zipEntry != null; zipEntry = zip.getNextEntry()) {
boolean doesMatch = patternMatcher.match(new HashMap<String, String>(), zipEntry.getName(), compiledPattern);
if (doesMatch) {
matches.add(zipEntry.getName());
}
}
} catch (IOException e) {
e.printStackTrace();
}
} else {
Vector<String> results = checkEntries(entry.list(), entry, "");
if (results != null) {
matches.addAll(results);
}
}
}
return matches;
}
private Vector<String> checkEntries(String[] entries, File parent, String prefix) {
if (entries == null ) {
return null;
}
public Vector<String> findMatches() {
Vector<String> matches = new Vector<>();
URL[] parentUrls = getClassLoaderURLs();
compiledPattern = patternMatcher.compilePattern(pattern);
for (URL url : parentUrls) {
if (!"file".equals(url.getProtocol())) {
continue;
}
URI entryURI;
try {
entryURI = url.toURI();
} catch (URISyntaxException e) {
continue;
}
File entry = new File(entryURI);
if (entry.isFile() && entry.toString().endsWith(".jar")) {
try {
ZipInputStream zip = new ZipInputStream(new FileInputStream(entry));
for (ZipEntry zipEntry = zip.getNextEntry(); zipEntry != null; zipEntry = zip.getNextEntry()) {
boolean doesMatch = patternMatcher.match(new HashMap<String, String>(), zipEntry.getName(), compiledPattern);
if (doesMatch) {
matches.add(zipEntry.getName());
}
}
} catch (IOException e) {
e.printStackTrace();
}
} else {
Vector<String> results = checkEntries(entry.list(), entry, "");
if (results != null) {
matches.addAll(results);
}
}
}
return matches;
}
Vector<String> matches = new Vector<>();
for (String listEntry : entries) {
File tempFile ;
if (!"".equals(prefix) ) {
tempFile = new File(parent, prefix + "/" + listEntry);
}
else {
tempFile = new File(parent, listEntry);
}
if (tempFile.isDirectory() &&
!(".".equals(listEntry) || "..".equals(listEntry)) ) {
if (!"".equals(prefix) ) {
matches.addAll(checkEntries(tempFile.list(), parent, prefix + "/" + listEntry));
}
else {
matches.addAll(checkEntries(tempFile.list(), parent, listEntry));
}
}
else {
String entryToCheck ;
if ("".equals(prefix)) {
entryToCheck = listEntry ;
}
else {
entryToCheck = prefix + "/" + listEntry ;
}
if (compared.contains(entryToCheck) ) {
continue;
}
else {
compared.add(entryToCheck) ;
}
boolean doesMatch = patternMatcher.match(new HashMap<String,String>(), entryToCheck, compiledPattern);
if (doesMatch) {
matches.add(entryToCheck);
}
}
}
return matches ;
}
private Vector<String> checkEntries(String[] entries, File parent, String prefix) {
/**
* @param patternMatcher the PatternMatcher implementation to use when comparing filenames
*/
public void setPatternMatcher(PatternMatcher<int[]> patternMatcher) {
this.patternMatcher = patternMatcher;
}
if (entries == null) {
return null;
}
private URL[] getClassLoaderURLs() {
URL[] urls;
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Vector<String> matches = new Vector<>();
for (String listEntry : entries) {
File tempFile;
if (!"".equals(prefix)) {
tempFile = new File(parent, prefix + "/" + listEntry);
} else {
tempFile = new File(parent, listEntry);
}
if (tempFile.isDirectory() &&
!(".".equals(listEntry) || "..".equals(listEntry))) {
if (!"".equals(prefix)) {
matches.addAll(checkEntries(tempFile.list(), parent, prefix + "/" + listEntry));
} else {
matches.addAll(checkEntries(tempFile.list(), parent, listEntry));
}
} else {
if (!(loader instanceof URLClassLoader)) {
loader = ClassPathFinder.class.getClassLoader();
}
String entryToCheck;
if ("".equals(prefix)) {
entryToCheck = listEntry;
} else {
entryToCheck = prefix + "/" + listEntry;
}
if (loader instanceof URLClassLoader) {
urls = ((URLClassLoader) loader).getURLs();
} else { //jdk9 or later
try {
urls = Collections.list(loader.getResources("")).toArray(new URL[0]);
} catch (IOException e) {
throw new XWorkException("unable to get ClassLoader URLs", e);
}
}
if (compared.contains(entryToCheck)) {
continue;
} else {
compared.add(entryToCheck);
}
return urls;
}
boolean doesMatch = patternMatcher.match(new HashMap<String, String>(), entryToCheck, compiledPattern);
if (doesMatch) {
matches.add(entryToCheck);
}
}
}
return matches;
}
/**
* @param patternMatcher the PatternMatcher implementation to use when comparing filenames
*/
public void setPatternMatcher(PatternMatcher<int[]> patternMatcher) {
this.patternMatcher = patternMatcher;
}
private URL[] getClassLoaderURLs() {
URL[] urls;
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (!(loader instanceof URLClassLoader)) {
loader = ClassPathFinder.class.getClassLoader();
}
if (loader instanceof URLClassLoader) {
urls = ((URLClassLoader) loader).getURLs();
} else { //jdk9 or later
try {
urls = Collections.list(loader.getResources("")).toArray(new URL[0]);
} catch (IOException e) {
throw new XWorkException("unable to get ClassLoader URLs", e);
}
}
return urls;
}
}
@@ -27,9 +27,9 @@ import com.opensymphony.xwork2.test.User;
import com.opensymphony.xwork2.util.*;
import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
import ognl.*;
import org.apache.struts2.TestUtils;
import java.lang.reflect.Method;
import java.text.DateFormat;
import java.util.*;
public class OgnlUtilTest extends XWorkTestCase {
@@ -373,24 +373,8 @@ public class OgnlUtilTest extends XWorkTestCase {
cal.set(Calendar.YEAR, 1982);
assertEquals(cal.getTime(), foo.getBirthday());
//UK style test
if (TestUtils.isJdk9OrLater()) {
/* In JDK 9 and later, the default locale data uses data derived from the
Unicode Consortium's Common Locale Data Repository (CLDR). The short date-time format is {1}, {0} in the
CLDR locale, as opposed to {1} {0} in the JRE locale data.
Please refer : http://www.oracle.com/technetwork/java/javase/9-relnote-issues-3704069.html#JDK-8008577 */
props.put("event", "18/10/2006, 14:23:45");
props.put("meeting", "09/09/2006, 14:30");
}
else {
props.put("event", "18/10/2006 14:23:45");
props.put("meeting", "09/09/2006 14:30");
}
context.put(ActionContext.LOCALE, Locale.UK);
ognlUtil.setProperties(props, foo, context);
//UK style test
cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.MONTH, Calendar.OCTOBER);
@@ -399,9 +383,12 @@ public class OgnlUtilTest extends XWorkTestCase {
cal.set(Calendar.HOUR_OF_DAY, 14);
cal.set(Calendar.MINUTE, 23);
cal.set(Calendar.SECOND, 45);
assertEquals(cal.getTime(), foo.getEvent());
Date eventTime = cal.getTime();
String formatted = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, Locale.UK)
.format(eventTime);
props.put("event", formatted);
cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
@@ -409,8 +396,19 @@ public class OgnlUtilTest extends XWorkTestCase {
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.HOUR_OF_DAY, 14);
cal.set(Calendar.MINUTE, 30);
assertEquals(cal.getTime(), foo.getMeeting());
Date meetingTime = cal.getTime();
formatted = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, Locale.UK)
.format(meetingTime);
props.put("meeting", formatted);
context.put(ActionContext.LOCALE, Locale.UK);
ognlUtil.setProperties(props, foo, context);
assertEquals(eventTime, foo.getEvent());
assertEquals(meetingTime, foo.getMeeting());
//test RFC 3339 date format for JSON
props.put("event", "1996-12-19T16:39:57Z");
@@ -30,7 +30,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static org.fest.assertions.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
public class AnnotationUtilsTest extends TestCase {
@@ -22,6 +22,7 @@ import com.opensymphony.xwork2.XWorkTestCase;
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
@@ -62,12 +63,14 @@ public class ClassPathFinderTest extends XWorkTestCase {
NotURLClassLoader loader = new NotURLClassLoader(Thread.currentThread().getContextClassLoader());
Thread.currentThread().setContextClassLoader(loader);
Class<?> clazz = loader.loadClass(ClassPathFinderTest.class.getName());
Object test = clazz.getConstructor().newInstance();
try {
Class<?> clazz = loader.loadClass(ClassPathFinderTest.class.getName());
Object test = clazz.getConstructor().newInstance();
clazz.getMethod("testFinder").invoke(test);
Thread.currentThread().setContextClassLoader(loader.parentClassLoader);
clazz.getMethod("testFinder").invoke(test);
} finally {
Thread.currentThread().setContextClassLoader(loader.parentClassLoader);
}
}
@@ -89,6 +92,8 @@ public class ClassPathFinderTest extends XWorkTestCase {
loadedClasses.put(name, defineClass(name, classBits, 0, classBits.length));
} catch (IOException e) {
throw new ClassNotFoundException("class " + name + " is not findable", e);
} catch (Exception e) {
loadedClasses.put(name, parentClassLoader.loadClass(name));
}
}
@@ -34,6 +34,7 @@ import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.jar.Attributes;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
@@ -49,10 +50,13 @@ public class JarEntryRevisionTest extends XWorkTestCase {
fileManager = container.getInstance(FileManagerFactory.class).getFileManager();
}
private void createJarFile(long time) throws Exception {
private String createJarFile(long time) throws Exception {
Manifest manifest = new Manifest();
manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
FileOutputStream fos = new FileOutputStream("target/JarEntryRevisionTest_testNeedsReloading.jar", false);
Path jarPath = Paths.get(Thread.currentThread().getContextClassLoader()
.getResource("xwork-jar.jar").toURI()).getParent();
File jarFile = jarPath.resolve("JarEntryRevisionTest_testNeedsReloading.jar").toFile();
FileOutputStream fos = new FileOutputStream(jarFile, false);
JarOutputStream target = new JarOutputStream(fos, manifest);
target.putNextEntry(new ZipEntry("com/opensymphony/xwork2/util/fs/"));
ZipEntry entry = new ZipEntry("com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class");
@@ -64,13 +68,14 @@ public class JarEntryRevisionTest extends XWorkTestCase {
target.closeEntry();
target.close();
fos.close();
return jarFile.toURI().toURL().toExternalForm();
}
public void testNeedsReloading() throws Exception {
long now = System.currentTimeMillis();
createJarFile(now);
URL url = new URL("jar:file:target/JarEntryRevisionTest_testNeedsReloading.jar!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class");
URL url = new URL("jar:" + createJarFile(now) + "!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class");
Revision entry = JarEntryRevision.build(url, fileManager);
assert entry != null;
assertFalse(entry.needsReloading());
@@ -82,9 +87,8 @@ public class JarEntryRevisionTest extends XWorkTestCase {
public void testNeedsReloadingWithContainerProvidedURLConnection() throws Exception {
long now = System.currentTimeMillis();
createJarFile(now);
URL url = new URL(null,
"jar:file:target/JarEntryRevisionTest_testNeedsReloading.jar!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class",
"jar:" + createJarFile(now) + "!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class",
new ContainerProvidedURLStreamHandler());
Revision entry = JarEntryRevision.build(url, fileManager);
assert entry != null;
@@ -97,9 +101,7 @@ public class JarEntryRevisionTest extends XWorkTestCase {
public void testNeedsReloadingWithContainerProvidedURLConnectionEmptyProtocol() throws Exception {
long now = System.currentTimeMillis();
createJarFile(now);
File targetDir = new File("target");
String targetUrlStr = targetDir.toURI().toURL().toString();
String targetUrlStr = createJarFile(now);
if (targetUrlStr.startsWith("file:")) {
targetUrlStr = targetUrlStr.substring(5);//emptying protocol; we expect framework will fix it
}
@@ -107,7 +109,7 @@ public class JarEntryRevisionTest extends XWorkTestCase {
targetUrlStr = targetUrlStr.substring(1);//we expect framework will fix it also
}
URL url = new URL(null,
"zip:" + targetUrlStr + "JarEntryRevisionTest_testNeedsReloading.jar!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class",
"zip:" + targetUrlStr + "!/com/opensymphony/xwork2/util/fs/JarEntryRevisionTest.class",
new ContainerProvidedURLStreamHandler());
Revision entry = JarEntryRevision.build(url, fileManager);
assert entry != null;
@@ -91,20 +91,4 @@ public class TestUtils {
return buffer.toString();
}
public static boolean isJdk9OrLater() {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if(loader instanceof URLClassLoader) {
return false;
}
loader = TestUtils.class.getClassLoader();
if(loader instanceof URLClassLoader) {
return false;
}
return true;
}
}
@@ -29,7 +29,7 @@ import java.lang.reflect.Member;
import java.util.Collections;
import java.util.Map;
import static org.fest.assertions.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
public class UploadedFileConverterTest {
@@ -22,18 +22,15 @@ import freemarker.cache.TemplateLoader;
import org.apache.struts2.StrutsInternalTestCase;
import org.apache.struts2.components.template.Template;
import org.apache.struts2.components.template.TemplateEngine;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.core.IsEqual;
import org.mockito.Matchers;
import java.util.HashMap;
import java.util.Map;
import static org.fest.assertions.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.hamcrest.MockitoHamcrest.argThat;
public class FreemarkerThemeTemplateLoaderTest extends StrutsInternalTestCase {
@@ -65,7 +62,7 @@ public class FreemarkerThemeTemplateLoaderTest extends StrutsInternalTestCase {
TemplateEngine engine = mock(TemplateEngine.class);
Map<String, String> props = new HashMap<String, String>();
props.put("parent", "foo/foo");
when(engine.getThemeProps(Matchers.argThat(new IsEqual<Template>(new Template("template", "foo/bar", "text.ftl"))))).thenReturn(props);
when(engine.getThemeProps(argThat(new IsEqual<>(new Template("template", "foo/bar", "text.ftl"))))).thenReturn(props);
loader.setTemplateEngine(engine);
TemplateLoader parent = mock(TemplateLoader.class);
+31
View File
@@ -61,6 +61,37 @@
<scope>test</scope>
</dependency>
<!--
The Java EE API modules listed below are all marked @Deprecated(forRemoval=true), because they are scheduled
for removal in Java 11. So the -add-module approach will no longer work in Java 11 out of the box.
What we will need to do in Java 11 and forward is include our own copy of the Java EE APIs on the class path
or module path. For example, we can add the JAX-B APIs as a maven dependency like this:
-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
@@ -231,12 +231,14 @@ public class EmbeddedJSPResultTest extends TestCase {
NotURLClassLoader loader = new NotURLClassLoader(parentClassLoader);
Thread.currentThread().setContextClassLoader(loader);
result.setLocation("org/apache/struts2/tag0.jsp");
result.execute(null);
try {
result.setLocation("org/apache/struts2/tag0.jsp");
result.execute(null);
assertEquals("Thissessionisnotsecure.OtherText", StringUtils.deleteWhitespace(response.getContentAsString()));
Thread.currentThread().setContextClassLoader(parentClassLoader);
assertEquals("Thissessionisnotsecure.OtherText", StringUtils.deleteWhitespace(response.getContentAsString()));
} finally {
Thread.currentThread().setContextClassLoader(parentClassLoader);
}
}
@Override
+2 -2
View File
@@ -101,8 +101,8 @@
</dependency>
<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert</artifactId>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
@@ -39,7 +39,7 @@ import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import static org.fest.assertions.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
public class JSONValidationInterceptorTest extends StrutsTestCase {
+2 -2
View File
@@ -80,8 +80,8 @@
</dependency>
<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert</artifactId>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
@@ -28,7 +28,7 @@ import java.io.StringWriter;
import java.io.Writer;
import java.util.Arrays;
import static org.fest.assertions.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
public class JacksonXmlHandlerTest extends XWorkTestCase {
+11 -8
View File
@@ -110,6 +110,7 @@
<!-- Sonar -->
<sonar.host.url>https://builds.apache.org/analysis/</sonar.host.url>
<maven-surefire-plugin.version>2.22.1</maven-surefire-plugin.version>
</properties>
<profiles>
@@ -169,6 +170,7 @@
</activation>
<properties>
<!-- coverall version 4.3.0 does not work with java 9, see https://github.com/trautonen/coveralls-maven-plugin/issues/112 -->
<!-- TODO delete coveralls.skip property after fix of https://github.com/cobertura/cobertura/issues/271 -->
<coveralls.skip>true</coveralls.skip>
</properties>
<build>
@@ -178,7 +180,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>--add-modules java.activation --add-modules java.xml.bind</argLine>
<!-- TODO delete forkCount=0 after fix of https://issues.apache.org/jira/browse/SUREFIRE-1588 -->
<forkCount>0</forkCount>
</configuration>
</plugin>
</plugins>
@@ -233,12 +236,12 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<version>${maven-surefire-plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.22.1</version>
<version>${maven-surefire-plugin.version}</version>
</dependency>
</dependencies>
<configuration>
@@ -972,16 +975,16 @@
</dependency>
<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert</artifactId>
<version>1.4</version>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>2.9.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<artifactId>mockito-core</artifactId>
<version>2.23.0</version>
<scope>test</scope>
</dependency>