diff --git a/.gitignore b/.gitignore index 00044ebc..0f9d045b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ target .classpath dependency-reduced-pom.xml build -.classpath .project .settings .idea diff --git a/pom.xml b/pom.xml index 2c9e02ae..b5f8944d 100644 --- a/pom.xml +++ b/pom.xml @@ -216,12 +216,6 @@ ${mavenVersion} test - - org.codehaus.plexus - plexus-interpolation - 1.26 - test - org.mockito mockito-core diff --git a/src/main/java/org/codehaus/mojo/exec/AbstractPath.java b/src/main/java/org/codehaus/mojo/exec/AbstractPath.java index 2ff7571f..88491542 100644 --- a/src/main/java/org/codehaus/mojo/exec/AbstractPath.java +++ b/src/main/java/org/codehaus/mojo/exec/AbstractPath.java @@ -35,7 +35,7 @@ public void setDependencies(Collection deps) { public void setDependency(String dependency) { // Is the the correct thing to do? See MOJO-348 if (dependencies == null) { - setDependencies(new java.util.ArrayList()); + setDependencies(new java.util.ArrayList<>()); } dependencies.add(dependency); } diff --git a/src/main/java/org/codehaus/mojo/exec/EnvStreamConsumer.java b/src/main/java/org/codehaus/mojo/exec/EnvStreamConsumer.java index 74bce11a..8369ed72 100644 --- a/src/main/java/org/codehaus/mojo/exec/EnvStreamConsumer.java +++ b/src/main/java/org/codehaus/mojo/exec/EnvStreamConsumer.java @@ -13,9 +13,9 @@ public class EnvStreamConsumer implements StreamConsumer { public static final String START_PARSING_INDICATOR = "================================This is the beginning of env parsing================================"; - private Map envs = new HashMap(); + private Map envs = new HashMap<>(); - private List unparsed = new ArrayList(); + private List unparsed = new ArrayList<>(); private boolean startParsing = false; diff --git a/src/main/java/org/codehaus/mojo/exec/ExecJavaMojo.java b/src/main/java/org/codehaus/mojo/exec/ExecJavaMojo.java index 1d9aaaf0..8721b7af 100644 --- a/src/main/java/org/codehaus/mojo/exec/ExecJavaMojo.java +++ b/src/main/java/org/codehaus/mojo/exec/ExecJavaMojo.java @@ -29,7 +29,6 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; -import org.apache.maven.project.ProjectBuilder; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.collection.CollectRequest; import org.eclipse.aether.graph.Dependency; @@ -55,12 +54,6 @@ public class ExecJavaMojo extends AbstractExecMojo { @Component private RepositorySystem repositorySystem; - /** - * @since 1.0 - */ - @Component - private ProjectBuilder projectBuilder; - /** * The main class to execute.
* With Java 9 and above you can prefix it with the modulename, e.g. com.greetings/com.greetings.Main @@ -255,70 +248,63 @@ public void execute() throws MojoExecutionException, MojoFailureException { } IsolatedThreadGroup threadGroup = new IsolatedThreadGroup(mainClass /* name */); + // TODO: + // Adjust implementation for future JDKs after removal of SecurityManager. + // See https://openjdk.org/jeps/411 for basic information. + // See https://bugs.openjdk.org/browse/JDK-8199704 for details about how users might be able to + // block + // System::exit in post-removal JDKs (still undecided at the time of writing this comment). Thread bootstrapThread = new Thread( threadGroup, - new Runnable() { - // TODO: - // Adjust implementation for future JDKs after removal of SecurityManager. - // See https://openjdk.org/jeps/411 for basic information. - // See https://bugs.openjdk.org/browse/JDK-8199704 for details about how users might be able to - // block - // System::exit in post-removal JDKs (still undecided at the time of writing this comment). - @SuppressWarnings("removal") - public void run() { - int sepIndex = mainClass.indexOf('/'); - - final String bootClassName; - if (sepIndex >= 0) { - bootClassName = mainClass.substring(sepIndex + 1); - } else { - bootClassName = mainClass; - } + () -> { + int sepIndex = mainClass.indexOf('/'); + + final String bootClassName; + if (sepIndex >= 0) { + bootClassName = mainClass.substring(sepIndex + 1); + } else { + bootClassName = mainClass; + } - SecurityManager originalSecurityManager = System.getSecurityManager(); - - try { - Class bootClass = Thread.currentThread() - .getContextClassLoader() - .loadClass(bootClassName); - - MethodHandles.Lookup lookup = MethodHandles.lookup(); - - MethodHandle mainHandle = lookup.findStatic( - bootClass, "main", MethodType.methodType(void.class, String[].class)); - - if (blockSystemExit) { - System.setSecurityManager(new SystemExitManager(originalSecurityManager)); - } - mainHandle.invoke(arguments); - } catch (IllegalAccessException - | NoSuchMethodException - | NoSuchMethodError e) { // just pass it on - Thread.currentThread() - .getThreadGroup() - .uncaughtException( - Thread.currentThread(), - new Exception( - "The specified mainClass doesn't contain a main method with appropriate signature.", - e)); - } catch ( - InvocationTargetException - e) { // use the cause if available to improve the plugin execution output - Throwable exceptionToReport = e.getCause() != null ? e.getCause() : e; - Thread.currentThread() - .getThreadGroup() - .uncaughtException(Thread.currentThread(), exceptionToReport); - } catch (SystemExitException systemExitException) { - getLog().info(systemExitException.getMessage()); - if (systemExitException.getExitCode() != 0) { - throw systemExitException; - } - } catch (Throwable e) { // just pass it on - Thread.currentThread().getThreadGroup().uncaughtException(Thread.currentThread(), e); - } finally { - if (blockSystemExit) { - System.setSecurityManager(originalSecurityManager); - } + SecurityManager originalSecurityManager = System.getSecurityManager(); + + try { + Class bootClass = + Thread.currentThread().getContextClassLoader().loadClass(bootClassName); + + MethodHandles.Lookup lookup = MethodHandles.lookup(); + + MethodHandle mainHandle = + lookup.findStatic(bootClass, "main", MethodType.methodType(void.class, String[].class)); + + if (blockSystemExit) { + System.setSecurityManager(new SystemExitManager(originalSecurityManager)); + } + mainHandle.invoke(arguments); + } catch (IllegalAccessException | NoSuchMethodException | NoSuchMethodError e) { // just pass it on + Thread.currentThread() + .getThreadGroup() + .uncaughtException( + Thread.currentThread(), + new Exception( + "The specified mainClass doesn't contain a main method with appropriate signature.", + e)); + } catch (InvocationTargetException e) { + // use the cause if available to improve the plugin execution output + Throwable exceptionToReport = e.getCause() != null ? e.getCause() : e; + Thread.currentThread() + .getThreadGroup() + .uncaughtException(Thread.currentThread(), exceptionToReport); + } catch (SystemExitException systemExitException) { + getLog().info(systemExitException.getMessage()); + if (systemExitException.getExitCode() != 0) { + throw systemExitException; + } + } catch (Throwable e) { // just pass it on + Thread.currentThread().getThreadGroup().uncaughtException(Thread.currentThread(), e); + } finally { + if (blockSystemExit) { + System.setSecurityManager(originalSecurityManager); } } }, @@ -452,7 +438,7 @@ private void joinThread(Thread thread, long timeoutMsecs) { private void terminateThreads(ThreadGroup threadGroup) { long startTime = System.currentTimeMillis(); - Set uncooperativeThreads = new HashSet(); // these were not responsive to interruption + Set uncooperativeThreads = new HashSet<>(); // these were not responsive to interruption for (Collection threads = getActiveThreads(threadGroup); !threads.isEmpty(); threads = getActiveThreads(threadGroup), threads.removeAll(uncooperativeThreads)) { @@ -512,7 +498,7 @@ private void terminateThreads(ThreadGroup threadGroup) { private Collection getActiveThreads(ThreadGroup threadGroup) { Thread[] threads = new Thread[threadGroup.activeCount()]; int numThreads = threadGroup.enumerate(threads); - Collection result = new ArrayList(numThreads); + Collection result = new ArrayList<>(numThreads); for (int i = 0; i < threads.length && threads[i] != null; i++) { result.add(threads[i]); } diff --git a/src/main/java/org/codehaus/mojo/exec/ExecMojo.java b/src/main/java/org/codehaus/mojo/exec/ExecMojo.java index 0b5765aa..4dae13d2 100644 --- a/src/main/java/org/codehaus/mojo/exec/ExecMojo.java +++ b/src/main/java/org/codehaus/mojo/exec/ExecMojo.java @@ -27,6 +27,7 @@ import java.io.OutputStream; import java.io.PrintWriter; import java.net.URL; +import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; @@ -65,7 +66,6 @@ import org.apache.maven.toolchain.Toolchain; import org.apache.maven.toolchain.ToolchainManager; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; -import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.cli.CommandLineException; import org.codehaus.plexus.util.cli.CommandLineUtils; @@ -273,7 +273,7 @@ public class ExecMojo extends AbstractExecMojo { * @since 1.1-beta-2 */ @Parameter - private Map environmentVariables = new HashMap(); + private Map environmentVariables = new HashMap<>(); /** * Environment script to be merged with environmentVariables This script is platform specifics, on Unix its @@ -378,7 +378,7 @@ public void execute() throws MojoExecutionException { String argsProp = getSystemProperty("exec.args"); - List commandArguments = new ArrayList(); + List commandArguments = new ArrayList<>(); if (hasCommandlineArgs()) { handleCommandLineArgs(commandArguments); @@ -419,13 +419,8 @@ public void execute() throws MojoExecutionException { getLog().warn("Could not create non existing parent directories for log file: " + outputFile); } - FileOutputStream outputStream = null; - try { - outputStream = new FileOutputStream(outputFile); - + try (FileOutputStream outputStream = new FileOutputStream(outputFile)) { resultCode = executeCommandLine(exec, commandLine, enviro, outputStream); - } finally { - IOUtil.close(outputStream); } } else if (useMavenLogger) { getLog().debug("Will redirect program output to Maven logger"); @@ -435,24 +430,14 @@ public void execute() throws MojoExecutionException { // which is why we capture the thread name prefix here. final String logPrefix = session.isParallel() ? "[" + Thread.currentThread().getName() + "] " : ""; - Consumer mavenOutRedirect = new Consumer() { - - @Override - public void accept(String logMessage) { - if (quietLogs) { - getLog().debug(logPrefix + logMessage); - } else { - getLog().info(logPrefix + logMessage); - } - } - }; - Consumer mavenErrRedirect = new Consumer() { - - @Override - public void accept(String logMessage) { - getLog().error(logPrefix + logMessage); + Consumer mavenOutRedirect = logMessage -> { + if (quietLogs) { + getLog().debug(logPrefix + logMessage); + } else { + getLog().info(logPrefix + logMessage); } }; + Consumer mavenErrRedirect = logMessage -> getLog().error(logPrefix + logMessage); try (OutputStream out = new LineRedirectOutputStream(mavenOutRedirect); OutputStream err = new LineRedirectOutputStream(mavenErrRedirect)) { @@ -489,7 +474,7 @@ public void accept(String logMessage) { private Map handleSystemEnvVariables() throws MojoExecutionException { - Map enviro = new HashMap(); + Map enviro = new HashMap<>(); Properties systemEnvVars = CommandLineUtils.getSystemEnvVars(); for (Map.Entry entry : systemEnvVars.entrySet()) { enviro.put((String) entry.getKey(), (String) entry.getValue()); @@ -508,7 +493,7 @@ private Map handleSystemEnvVariables() throws MojoExecutionExcep } if (this.getLog().isDebugEnabled()) { - Set keys = new TreeSet(); + Set keys = new TreeSet<>(); keys.addAll(enviro.keySet()); for (String key : keys) { this.getLog().debug("env: " + key + "=" + enviro.get(key)); @@ -740,9 +725,9 @@ private static void addToClasspath(StringBuffer theClasspath, String toAdd) { private List filterArtifacts(List artifacts, Collection dependencies) { AndArtifactFilter filter = new AndArtifactFilter(); - filter.add(new IncludesArtifactFilter(new ArrayList(dependencies))); // gosh + filter.add(new IncludesArtifactFilter(new ArrayList<>(dependencies))); // gosh - List filteredArtifacts = new ArrayList(); + List filteredArtifacts = new ArrayList<>(); for (Artifact artifact : artifacts) { if (filter.include(artifact)) { getLog().debug("filtering in " + artifact); @@ -837,7 +822,7 @@ private static List getExecutableExtensions() { } private List getExecutablePaths(Map enviro) { - List paths = new ArrayList(); + List paths = new ArrayList<>(); paths.add(""); String path = enviro.get("PATH"); @@ -850,7 +835,7 @@ private List getExecutablePaths(Map enviro) { protected int executeCommandLine( Executor exec, CommandLine commandLine, Map enviro, OutputStream out, OutputStream err) - throws ExecuteException, IOException { + throws IOException { // note: don't use BufferedOutputStream here since it delays the outputs MEXEC-138 PumpStreamHandler psh = new PumpStreamHandler(out, err, System.in); return executeCommandLine(exec, commandLine, enviro, psh); @@ -858,7 +843,7 @@ protected int executeCommandLine( protected int executeCommandLine( Executor exec, CommandLine commandLine, Map enviro, FileOutputStream outputFile) - throws ExecuteException, IOException { + throws IOException { BufferedOutputStream bos = new BufferedOutputStream(outputFile); PumpStreamHandler psh = new PumpStreamHandler(bos); return executeCommandLine(exec, commandLine, enviro, psh); @@ -866,7 +851,7 @@ protected int executeCommandLine( protected int executeCommandLine( Executor exec, final CommandLine commandLine, Map enviro, final PumpStreamHandler psh) - throws ExecuteException, IOException { + throws IOException { exec.setStreamHandler(psh); int result; @@ -978,30 +963,30 @@ private Toolchain getToolchain() { * @throws IOException */ private File createJar(List classPath, String mainClass) throws IOException { - File file = File.createTempFile("maven-exec", ".jar"); + File file = Files.createTempFile("maven-exec", ".jar").toFile(); file.deleteOnExit(); - FileOutputStream fos = new FileOutputStream(file); - JarOutputStream jos = new JarOutputStream(fos); - jos.setLevel(JarOutputStream.STORED); - JarEntry je = new JarEntry("META-INF/MANIFEST.MF"); - jos.putNextEntry(je); - - Manifest man = new Manifest(); - - // we can't use StringUtils.join here since we need to add a '/' to - // the end of directory entries - otherwise the jvm will ignore them. - StringBuilder cp = new StringBuilder(); - for (String el : classPath) { - // NOTE: if File points to a directory, this entry MUST end in '/'. - cp.append(new URL(new File(el).toURI().toASCIIString()).toExternalForm() + " "); - } + try (FileOutputStream fos = new FileOutputStream(file); + JarOutputStream jos = new JarOutputStream(fos)) { + jos.setLevel(JarOutputStream.STORED); + JarEntry je = new JarEntry("META-INF/MANIFEST.MF"); + jos.putNextEntry(je); + + Manifest man = new Manifest(); + + // we can't use StringUtils.join here since we need to add a '/' to + // the end of directory entries - otherwise the jvm will ignore them. + StringBuilder cp = new StringBuilder(); + for (String el : classPath) { + // NOTE: if File points to a directory, this entry MUST end in '/'. + cp.append(new URL(new File(el).toURI().toASCIIString()).toExternalForm() + " "); + } - man.getMainAttributes().putValue("Manifest-Version", "1.0"); - man.getMainAttributes().putValue("Class-Path", cp.toString().trim()); - man.getMainAttributes().putValue("Main-Class", mainClass); + man.getMainAttributes().putValue("Manifest-Version", "1.0"); + man.getMainAttributes().putValue("Class-Path", cp.toString().trim()); + man.getMainAttributes().putValue("Main-Class", mainClass); - man.write(jos); - jos.close(); + man.write(jos); + } return file; } @@ -1009,15 +994,10 @@ private File createJar(List classPath, String mainClass) throws IOExcept private void createArgFile(String filePath, List lines) throws IOException { final String EOL = System.getProperty("line.separator", "\\n"); - FileWriter writer = null; - try { - writer = new FileWriter(filePath); + try (FileWriter writer = new FileWriter(filePath)) { for (String line : lines) { writer.append(line).append(EOL); } - - } finally { - IOUtil.close(writer); } } @@ -1055,9 +1035,7 @@ protected Map createEnvs(File envScriptFile) throws MojoExecutio } results = stdout.getParsedEnv(); - } catch (CommandLineException e) { - throw new MojoExecutionException(e.getMessage()); - } catch (IOException e) { + } catch (CommandLineException | IOException e) { throw new MojoExecutionException(e.getMessage()); } finally { if (tmpEnvExecFile != null) { @@ -1069,13 +1047,11 @@ protected Map createEnvs(File envScriptFile) throws MojoExecutio } protected File createEnvWrapperFile(File envScript) throws IOException { - PrintWriter writer = null; File tmpFile = null; - try { - if (OS.isFamilyWindows()) { - tmpFile = File.createTempFile("env", ".bat"); - writer = new PrintWriter(tmpFile); + if (OS.isFamilyWindows()) { + tmpFile = Files.createTempFile("env", ".bat").toFile(); + try (PrintWriter writer = new PrintWriter(tmpFile)) { writer.append("@echo off").println(); writer.append("call \"") .append(envScript.getCanonicalPath()) @@ -1085,10 +1061,11 @@ protected File createEnvWrapperFile(File envScript) throws IOException { .println(); writer.append("set").println(); writer.flush(); - } else { - tmpFile = File.createTempFile("env", ".sh"); - // tmpFile.setExecutable( true );//java 6 only - writer = new PrintWriter(tmpFile); + } + } else { + tmpFile = Files.createTempFile("env", ".sh").toFile(); + // tmpFile.setExecutable( true );//java 6 only + try (PrintWriter writer = new PrintWriter(tmpFile)) { writer.append("#! /bin/sh").println(); writer.append(". ").append(envScript.getCanonicalPath()).println(); // works on all unix?? writer.append("echo " + EnvStreamConsumer.START_PARSING_INDICATOR) @@ -1096,8 +1073,6 @@ protected File createEnvWrapperFile(File envScript) throws IOException { writer.append("env").println(); writer.flush(); } - } finally { - IOUtil.close(writer); } return tmpFile; diff --git a/src/main/java/org/codehaus/mojo/exec/PathsToolchainFactory.java b/src/main/java/org/codehaus/mojo/exec/PathsToolchainFactory.java index c0db9276..3ea4ef05 100644 --- a/src/main/java/org/codehaus/mojo/exec/PathsToolchainFactory.java +++ b/src/main/java/org/codehaus/mojo/exec/PathsToolchainFactory.java @@ -75,7 +75,7 @@ public ToolchainPrivate createToolchain(final ToolchainModel model) throws Misco final Xpp3Dom[] pathDoms = pathDom.getChildren("path"); if (pathDoms == null || pathDoms.length == 0) return pathsToolchain; - final List paths = new ArrayList(pathDoms.length); + final List paths = new ArrayList<>(pathDoms.length); for (final Xpp3Dom pathdom : pathDoms) { final String pathString = pathdom.getValue(); @@ -118,9 +118,7 @@ protected Object getBeanProperty(final Object obj, final String property) { final Method method = new PropertyDescriptor(property, obj.getClass()).getReadMethod(); return method.invoke(obj); - } catch (final IntrospectionException e) { - throw new RuntimeException("Incompatible toolchain API", e); - } catch (final IllegalAccessException e) { + } catch (final IntrospectionException | IllegalAccessException e) { throw new RuntimeException("Incompatible toolchain API", e); } catch (final InvocationTargetException e) { final Throwable cause = e.getCause(); diff --git a/src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java b/src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java index 4e4bcbde..3a0773a2 100644 --- a/src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java +++ b/src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java @@ -12,6 +12,7 @@ import java.io.File; import java.io.IOException; import java.io.OutputStream; +import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; @@ -52,15 +53,15 @@ public class ExecMojoTest extends AbstractMojoTestCase { static class MockExecMojo extends ExecMojo { public int executeResult; - public List commandLines = new ArrayList(); + public List commandLines = new ArrayList<>(); public String failureMsg; - public Map systemProperties = new HashMap(); + public Map systemProperties = new HashMap<>(); protected int executeCommandLine( Executor exec, CommandLine commandLine, Map enviro, OutputStream out, OutputStream err) - throws IOException, ExecuteException { + throws ExecuteException { commandLines.add(commandLine); if (failureMsg != null) { throw new ExecuteException(failureMsg, executeResult); @@ -89,7 +90,7 @@ public void setUp() throws Exception { mojo.setExecutable(SOME_EXECUTABLE); mojo.setArguments(Arrays.asList(new String[] {"--version"})); mojo.executeResult = 0; - mojo.setBasedir(File.createTempFile("mvn-temp", "txt").getParentFile()); + mojo.setBasedir(Files.createTempFile("mvn-temp", "txt").getParent().toFile()); } public void testRunOK() throws MojoExecutionException { @@ -117,7 +118,7 @@ public void testGetExecutablePath() throws IOException { ExecMojo realMojo = new ExecMojo(); File workdir = new File(System.getProperty("user.dir")); - Map enviro = new HashMap(); + Map enviro = new HashMap<>(); String myJavaPath = "target" + File.separator + "javax"; File f = new File(myJavaPath); @@ -173,7 +174,7 @@ public void testGetExecutablePathPreferExecutableExtensionsOnWindows() throws IO final File workdir = new File(tmp, "testGetExecutablePathPreferExecutableExtensionsOnWindows"); workdir.mkdirs(); - final Map enviro = new HashMap(); + final Map enviro = new HashMap<>(); final File f = new File(workdir, "mycmd"); final File fCmd = new File(workdir, "mycmd.cmd"); diff --git a/src/test/java/org/codehaus/plexus/util/interpolation/Interpolator.java b/src/test/java/org/codehaus/plexus/util/interpolation/Interpolator.java deleted file mode 100644 index 1c54fd73..00000000 --- a/src/test/java/org/codehaus/plexus/util/interpolation/Interpolator.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.codehaus.plexus.util.interpolation; - -/** - * COPIED FROM plexus-utils-1.5.15 TO SATISFY TESTS Interpolator interface. Based on existing RegexBasedInterpolator - * interface. - * - * @author cstamas - * @deprecated Use plexus-interpolation APIs instead. - * @version $Id$ - */ -public interface Interpolator extends org.codehaus.plexus.interpolation.Interpolator {} diff --git a/src/test/java/org/codehaus/plexus/util/interpolation/RegexBasedInterpolator.java b/src/test/java/org/codehaus/plexus/util/interpolation/RegexBasedInterpolator.java deleted file mode 100644 index 4c151c8a..00000000 --- a/src/test/java/org/codehaus/plexus/util/interpolation/RegexBasedInterpolator.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.codehaus.plexus.util.interpolation; - -import java.util.List; - -/** - * COPIED FROM plexus-utils-1.5.15 TO SATISFY TESTS - * - * @version $Id$ - * @deprecated Use plexus-interpolation APIs instead. - */ -public class RegexBasedInterpolator extends org.codehaus.plexus.interpolation.RegexBasedInterpolator - implements Interpolator { - public RegexBasedInterpolator() { - super(); - } - - public RegexBasedInterpolator(List valueSources) { - super(valueSources); - } - - public RegexBasedInterpolator(String startRegex, String endRegex, List valueSources) { - super(startRegex, endRegex, valueSources); - } - - public RegexBasedInterpolator(String startRegex, String endRegex) { - super(startRegex, endRegex); - } - - public void addValueSource(ValueSource valueSource) { - super.addValueSource(valueSource); - } - - public void removeValuesSource(ValueSource valueSource) { - super.removeValuesSource(valueSource); - } -} diff --git a/src/test/java/org/codehaus/plexus/util/interpolation/ValueSource.java b/src/test/java/org/codehaus/plexus/util/interpolation/ValueSource.java deleted file mode 100644 index d7cf5e5e..00000000 --- a/src/test/java/org/codehaus/plexus/util/interpolation/ValueSource.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.codehaus.plexus.util.interpolation; - -/** - * COPIED FROM plexus-utils-1.5.15 TO SATISFY TESTS - * - * @author jdcasey - * @deprecated Use plexus-interpolation APIs instead. - * @version $Id$ - */ -public interface ValueSource extends org.codehaus.plexus.interpolation.ValueSource {}