diff --git a/pom.xml b/pom.xml index c61ce0a..ee4f07b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.sonatype.oss oss-parent - 7 + 9 org.fitnesse.plugins @@ -35,19 +35,19 @@ org.fitnesse fitnesse - 20150114 + 20161106 provided junit junit - 4.6 + 4.12 test org.mockito mockito-all - 1.8.5 + 1.10.19 test @@ -57,6 +57,11 @@ jar compile + + com.jcabi + jcabi-aether + 0.10.1 + @@ -82,8 +87,8 @@ maven-compiler-plugin - 1.6 - 1.6 + 1.8 + 1.8 @@ -100,5 +105,10 @@ amolenaar@xebia.com Arjan Molenaar + + smansri + mansri.seifeddine@gmail.com + Seifeddin Mansri + diff --git a/src/main/java/fitnesse/wikitext/widgets/MavenClasspathExtractionException.java b/src/main/java/fitnesse/wikitext/widgets/MavenClasspathExtractionException.java index 6be4696..e2fa1f9 100644 --- a/src/main/java/fitnesse/wikitext/widgets/MavenClasspathExtractionException.java +++ b/src/main/java/fitnesse/wikitext/widgets/MavenClasspathExtractionException.java @@ -1,12 +1,6 @@ package fitnesse.wikitext.widgets; -@SuppressWarnings("serial") public class MavenClasspathExtractionException extends Exception { - - public MavenClasspathExtractionException(String message, Throwable cause) { - super(message, cause); - } - public MavenClasspathExtractionException(Throwable cause) { super(cause); } diff --git a/src/main/java/fitnesse/wikitext/widgets/MavenClasspathExtractor.java b/src/main/java/fitnesse/wikitext/widgets/MavenClasspathExtractor.java index e032f37..91ec35a 100644 --- a/src/main/java/fitnesse/wikitext/widgets/MavenClasspathExtractor.java +++ b/src/main/java/fitnesse/wikitext/widgets/MavenClasspathExtractor.java @@ -3,14 +3,11 @@ import org.apache.maven.DefaultMaven; import org.apache.maven.Maven; import org.apache.maven.artifact.DependencyResolutionRequiredException; -import org.apache.maven.cli.MavenCli; import org.apache.maven.execution.DefaultMavenExecutionRequest; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenExecutionRequestPopulationException; import org.apache.maven.execution.MavenExecutionRequestPopulator; import org.apache.maven.project.*; -import org.apache.maven.settings.Settings; -import org.apache.maven.settings.building.*; import org.codehaus.plexus.*; import org.codehaus.plexus.classworlds.ClassWorld; import org.codehaus.plexus.classworlds.realm.ClassRealm; @@ -33,7 +30,6 @@ public class MavenClasspathExtractor { public final static String DEFAULT_SCOPE = "test"; - public final static String MAVEN_USER_SETTINGS = "maven.user.settings"; private final Logger logger = new ConsoleLoggerManager().getLoggerForComponent("maven-classpath-plugin"); @@ -41,7 +37,7 @@ public class MavenClasspathExtractor { // Ensure M2_HOME variable is handled in a way similar to the mvn executable (script). To the extend possible. static { - String m2Home = System.getenv().get("M2_HOME"); + final String m2Home = System.getenv().get("M2_HOME"); if (m2Home != null && System.getProperty("maven.home") == null) { System.setProperty("maven.home", m2Home); } @@ -51,20 +47,17 @@ public MavenClasspathExtractor() throws PlexusContainerException { plexusContainer = buildPlexusContainer(getClass().getClassLoader(), null); } - public List extractClasspathEntries(File pomFile) throws MavenClasspathExtractionException { + public List extractClasspathEntries(final File pomFile) throws MavenClasspathExtractionException { return extractClasspathEntries(pomFile, DEFAULT_SCOPE); } - public List extractClasspathEntries(File pomFile, String scope) throws MavenClasspathExtractionException { - + public List extractClasspathEntries(final File pomFile, final String scope) throws MavenClasspathExtractionException { try { - MavenExecutionRequest mavenExecutionRequest = mavenConfiguration(); + final MavenExecutionRequest mavenExecutionRequest = mavenConfiguration(); mavenExecutionRequest.setBaseDirectory(pomFile.getParentFile()); mavenExecutionRequest.setPom(pomFile); - - ProjectBuildingResult projectBuildingResult = buildProject(pomFile, mavenExecutionRequest); - return getClasspathForScope(projectBuildingResult, scope); + return getClasspathForScope(buildProject(pomFile, mavenExecutionRequest), scope); } catch (ComponentLookupException e) { throw new MavenClasspathExtractionException(e); @@ -75,43 +68,35 @@ public List extractClasspathEntries(File pomFile, String scope) throws M } } - private List getClasspathForScope( - ProjectBuildingResult projectBuildingResult, String scope) - throws DependencyResolutionRequiredException { - MavenProject project = projectBuildingResult.getProject(); - - if ("compile".equalsIgnoreCase(scope)) { - return project.getCompileClasspathElements(); - } else if ("runtime".equalsIgnoreCase(scope)) { - return project.getRuntimeClasspathElements(); - } - return project.getTestClasspathElements(); - - } + private List getClasspathForScope(ProjectBuildingResult projectBuildingResult, String scope) throws DependencyResolutionRequiredException { + final MavenProject project = projectBuildingResult.getProject(); + + if ("compile".equalsIgnoreCase(scope)) { + return project.getCompileClasspathElements(); + } else if ("runtime".equalsIgnoreCase(scope)) { + return project.getRuntimeClasspathElements(); + } + return project.getTestClasspathElements(); + } // protected for test purposes protected MavenExecutionRequest mavenConfiguration() throws MavenClasspathExtractionException { - MavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest(); + final MavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest(); try { - MavenExecutionRequestPopulator executionRequestPopulator = lookup(MavenExecutionRequestPopulator.class); - MavenExecutionRequestPopulator populator = lookup(MavenExecutionRequestPopulator.class); + final MavenExecutionRequestPopulator executionRequestPopulator = lookup(MavenExecutionRequestPopulator.class); + final MavenExecutionRequestPopulator populator = lookup(MavenExecutionRequestPopulator.class); mavenExecutionRequest.setInteractiveMode(false); mavenExecutionRequest.setSystemProperties(System.getProperties()); mavenExecutionRequest.getSystemProperties().putAll(getEnvVars()); - - Settings settings = getSettings(mavenExecutionRequest); - executionRequestPopulator.populateFromSettings(mavenExecutionRequest, settings); + executionRequestPopulator.populateDefaults(mavenExecutionRequest); populator.populateDefaults(mavenExecutionRequest); - logger.debug( "Local repository " + mavenExecutionRequest.getLocalRepository()); - + logger.debug("Local repository " + mavenExecutionRequest.getLocalRepository()); } catch (ComponentLookupException e) { - throw new MavenClasspathExtractionException(e); - } catch (SettingsBuildingException e) { throw new MavenClasspathExtractionException(e); } catch (MavenExecutionRequestPopulationException e) { throw new MavenClasspathExtractionException(e); @@ -119,58 +104,11 @@ protected MavenExecutionRequest mavenConfiguration() throws MavenClasspathExtrac return mavenExecutionRequest; } - private Settings getSettings(MavenExecutionRequest mavenExecutionRequest) - throws ComponentLookupException, SettingsBuildingException { - - SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest(); - - // TODO: should be configurable by system properties? - final File globalSettingsFile = MavenCli.DEFAULT_GLOBAL_SETTINGS_FILE; - - //Allows users to set "maven.user.settings" if they use a custom settings.xml - File userSettingsFile; - if(System.getProperty(MAVEN_USER_SETTINGS) != null) { - userSettingsFile = new File(System.getProperty(MAVEN_USER_SETTINGS)); - } else { - userSettingsFile = MavenCli.DEFAULT_USER_SETTINGS_FILE; - } - - settingsRequest.setGlobalSettingsFile(globalSettingsFile); - settingsRequest.setUserSettingsFile(userSettingsFile); - - settingsRequest.setSystemProperties(mavenExecutionRequest - .getSystemProperties()); - settingsRequest.setUserProperties(mavenExecutionRequest - .getUserProperties()); - - logger.debug("Reading global settings from " + settingsRequest.getGlobalSettingsFile()); - logger.debug("Reading user settings from " + settingsRequest.getUserSettingsFile()); - - SettingsBuilder settingsBuilder = lookup(SettingsBuilder.class); - - SettingsBuildingResult settingsResult = settingsBuilder - .build(settingsRequest); - - if (!settingsResult.getProblems().isEmpty()) { - logger.warn(""); - logger.warn("Some problems were encountered while building the effective settings"); - - for (SettingsProblem problem : settingsResult.getProblems()) { - logger.warn(problem.getMessage() + " @ " - + problem.getLocation()); - } - - logger.warn(""); - } - - return settingsResult.getEffectiveSettings(); - } - private Properties getEnvVars() { - Properties envVars = new Properties(); - boolean caseSensitive = !Os.isFamily(Os.FAMILY_WINDOWS); - for (Map.Entry entry : System.getenv().entrySet()) { - String key = "env." + (caseSensitive ? entry.getKey() : entry.getKey().toUpperCase(Locale.ENGLISH)); + final Properties envVars = new Properties(); + final boolean caseSensitive = !Os.isFamily(Os.FAMILY_WINDOWS); + for (final Map.Entry entry : System.getenv().entrySet()) { + final String key = "env." + (caseSensitive ? entry.getKey() : entry.getKey().toUpperCase(Locale.ENGLISH)); envVars.setProperty(key, entry.getValue()); } return envVars; @@ -178,46 +116,36 @@ private Properties getEnvVars() { public ProjectBuildingResult buildProject(File mavenProject, MavenExecutionRequest mavenExecutionRequest) throws ProjectBuildingException, ComponentLookupException { - ProjectBuilder projectBuilder = lookup(ProjectBuilder.class); - ProjectBuildingRequest projectBuildingRequest = mavenExecutionRequest.getProjectBuildingRequest(); - - RepositorySystemSession repositorySystemSession = buildRepositorySystemSession(mavenExecutionRequest); - - projectBuildingRequest.setRepositorySession(repositorySystemSession); - + final ProjectBuildingRequest projectBuildingRequest = mavenExecutionRequest.getProjectBuildingRequest(); + projectBuildingRequest.setRepositorySession(buildRepositorySystemSession(mavenExecutionRequest)); projectBuildingRequest.setProcessPlugins(false); - projectBuildingRequest.setResolveDependencies(true); - return projectBuilder.build(mavenProject, projectBuildingRequest); + return lookup(ProjectBuilder.class).build(mavenProject, projectBuildingRequest); } - public T lookup(Class clazz) throws ComponentLookupException { + public T lookup(final Class clazz) throws ComponentLookupException { return plexusContainer.lookup(clazz); } - private RepositorySystemSession buildRepositorySystemSession(MavenExecutionRequest mavenExecutionRequest) throws ComponentLookupException { - DefaultMaven defaultMaven = (DefaultMaven) lookup(Maven.class); - return defaultMaven.newRepositorySession(mavenExecutionRequest); + private RepositorySystemSession buildRepositorySystemSession(final MavenExecutionRequest mavenExecutionRequest) throws ComponentLookupException { + return ((DefaultMaven) lookup(Maven.class)).newRepositorySession(mavenExecutionRequest); } - public static PlexusContainer buildPlexusContainer(ClassLoader mavenClassLoader, ClassLoader parent) throws PlexusContainerException { - DefaultContainerConfiguration conf = new DefaultContainerConfiguration(); + public static PlexusContainer buildPlexusContainer(final ClassLoader mavenClassLoader, final ClassLoader parent) throws PlexusContainerException { + final DefaultContainerConfiguration conf = new DefaultContainerConfiguration(); - ClassWorld classWorld = new ClassWorld(); + final ClassWorld classWorld = new ClassWorld(); - ClassRealm classRealm = new ClassRealm( classWorld, "maven", mavenClassLoader ); - classRealm.setParentRealm( new ClassRealm( classWorld, "maven-parent", - parent == null ? Thread.currentThread().getContextClassLoader() - : parent ) ); - conf.setRealm( classRealm ); + final ClassRealm classRealm = new ClassRealm(classWorld, "maven", mavenClassLoader); + final ClassLoader classLoader = parent == null ? Thread.currentThread().getContextClassLoader() : parent; + classRealm.setParentRealm(new ClassRealm(classWorld, "maven-parent", classLoader)); + conf.setRealm(classRealm); return buildPlexusContainer(conf); } - private static PlexusContainer buildPlexusContainer(ContainerConfiguration containerConfiguration ) throws PlexusContainerException { - DefaultPlexusContainer plexusContainer = new DefaultPlexusContainer( containerConfiguration ); - return plexusContainer; + private static PlexusContainer buildPlexusContainer(final ContainerConfiguration containerConfiguration) throws PlexusContainerException { + return new DefaultPlexusContainer(containerConfiguration); } - } diff --git a/src/main/java/fitnesse/wikitext/widgets/MavenClasspathSymbolType.java b/src/main/java/fitnesse/wikitext/widgets/MavenClasspathSymbolType.java index b494d4b..f106335 100644 --- a/src/main/java/fitnesse/wikitext/widgets/MavenClasspathSymbolType.java +++ b/src/main/java/fitnesse/wikitext/widgets/MavenClasspathSymbolType.java @@ -29,12 +29,12 @@ public class MavenClasspathSymbolType extends SymbolType implements Rule, Transl private MavenClasspathExtractor mavenClasspathExtractor; - private final Map> classpathCache = new HashMap>(); + private final Map> classpathCache = new HashMap<>(); public MavenClasspathSymbolType() throws PlexusContainerException { super("MavenClasspathSymbolType"); - String disablePropertyValue = System.getProperty(DISABLE_KEY); + final String disablePropertyValue = System.getProperty(DISABLE_KEY); if (!"true".equalsIgnoreCase(disablePropertyValue)) { this.mavenClasspathExtractor = new MavenClasspathExtractor(); } @@ -47,32 +47,27 @@ public MavenClasspathSymbolType() throws PlexusContainerException { @Override public String toTarget(Translator translator, Symbol symbol) { - List classpathElements = null; - ParsedSymbol parsedSymbol = getParsedSymbol(translator, symbol); - StringBuilder classpathForRender = new StringBuilder("

Maven classpath [file: ") + final ParsedSymbol parsedSymbol = getParsedSymbol(translator, symbol); + final StringBuilder classpathForRender = new StringBuilder("

Maven classpath [file: ") .append(parsedSymbol.getPomFile()) .append(", scope: ") .append(parsedSymbol.getScope()) .append("]:

") .append("
    "); try { - classpathElements = getClasspathElements(parsedSymbol); - for (String element : classpathElements) { + for (final String element : getClasspathElements(parsedSymbol)) { classpathForRender.append("
  • ").append(element).append("
  • "); } } catch (MavenClasspathExtractionException e) { - classpathForRender.append("
  • Unable to parse POM file: ") - .append(e.getMessage()).append("
  • "); + classpathForRender.append("
  • Unable to parse POM file: ").append(e.getMessage()).append("
  • "); } classpathForRender.append("
"); return classpathForRender.toString(); - } - @SuppressWarnings("unchecked") private List getClasspathElements(final ParsedSymbol parsedSymbol) throws MavenClasspathExtractionException { - String symbol = parsedSymbol.symbol; + final String symbol = parsedSymbol.symbol; if(classpathCache.containsKey(symbol)) { return classpathCache.get(symbol); } else { @@ -93,7 +88,7 @@ private ParsedSymbol getParsedSymbol(Translator translator, Symbol symbol) { public Maybe parse(Symbol current, Parser parser) { if (!parser.isMoveNext(SymbolType.Whitespace)) return Symbol.nothing; - return new Maybe(current.add(parser.parseToEnds(0, SymbolProvider.pathRuleProvider, new SymbolType[] {SymbolType.Newline}))); + return new Maybe<>(current.add(parser.parseToEnds(0, SymbolProvider.pathRuleProvider, new SymbolType[] {SymbolType.Newline}))); } @Override @@ -135,7 +130,7 @@ public ParsedSymbol(String symbol) { private void parseSymbol() { if (symbol.contains("@")) { - String[] s = symbol.split("@"); + final String[] s = symbol.split("@"); pomFile = new File(s[0]); scope = s[1]; } else { @@ -164,7 +159,7 @@ public int hashCode() { @Override public boolean equals(Object obj) { if (obj instanceof ParsedSymbol) { - ParsedSymbol ps = (ParsedSymbol) obj; + final ParsedSymbol ps = (ParsedSymbol) obj; return symbol.equals(ps.symbol) && lastModified == ps.lastModified; } return false; diff --git a/src/test/java/fitnesse/wikitext/widgets/MavenClasspathExtractorTest.java b/src/test/java/fitnesse/wikitext/widgets/MavenClasspathExtractorTest.java index 70ee850..e90ce95 100644 --- a/src/test/java/fitnesse/wikitext/widgets/MavenClasspathExtractorTest.java +++ b/src/test/java/fitnesse/wikitext/widgets/MavenClasspathExtractorTest.java @@ -33,7 +33,7 @@ public void extractedClasspathIncludesTestScopeDependencies() throws MavenClassp String path = sb.toString(); - assertEquals(3, classpathEntries.size()); + assertEquals(4, classpathEntries.size()); assertTrue(path.contains("commons-lang")); }