diff --git a/.github/workflows/maven-verify.yml b/.github/workflows/maven-verify.yml
index 932827c..56062b5 100644
--- a/.github/workflows/maven-verify.yml
+++ b/.github/workflows/maven-verify.yml
@@ -25,3 +25,7 @@ jobs:
build:
name: Verify
uses: apache/maven-gh-actions-shared/.github/workflows/maven-verify.yml@v4
+ with:
+ ff-maven: "4.0.0-beta-3" # Maven version for fail-fast-build
+ maven-matrix: '[ "4.0.0-beta-3" ]'
+ jdk-matrix: '[ "17", "21" ]'
diff --git a/pom.xml b/pom.xml
index c5a01aa..1167764 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,11 +23,12 @@ under the License.
org.apache.maven.plugins
maven-plugins
- 41
+ 42
+
maven-resources-plugin
- 3.3.2-SNAPSHOT
+ 4.0.0-SNAPSHOT
maven-plugin
Apache Maven Resources Plugin
@@ -71,116 +72,104 @@ under the License.
- 3.3.2
- 3.2.5
- 8
+ 4.0.0-beta-3
+ 17
+
+ 4.0.0-SNAPSHOT
+ 4.0.0-SNAPSHOT
+ 4.0.0-alpha-3-SNAPSHOT
+ 0.0.7
+ 3.7.0
+ ${mavenPluginPluginVersion}
+
2023-03-21T12:01:37Z
org.apache.maven
- maven-plugin-api
+ maven-api-core
${mavenVersion}
provided
org.apache.maven
- maven-core
+ maven-api-meta
${mavenVersion}
provided
org.apache.maven
- maven-model
+ maven-api-model
${mavenVersion}
provided
org.apache.maven
- maven-settings
+ maven-api-di
${mavenVersion}
provided
-
- org.apache.maven.plugin-tools
- maven-plugin-annotations
- provided
-
-
- org.codehaus.plexus
- plexus-interpolation
- 1.27
- runtime
-
-
- org.eclipse.sisu
- org.eclipse.sisu.plexus
- 0.3.5
- provided
-
-
- org.codehaus.plexus
- plexus-utils
- test
-
-
- org.codehaus.plexus
- plexus-xml
- test
-
org.apache.maven.shared
maven-filtering
${mavenFilteringVersion}
- commons-io
- commons-io
- 2.16.0
- test
+ org.sonatype.plexus
+ plexus-build-api
+ ${plexusBuildApiVersion}
+
- org.apache.commons
- commons-lang3
- 3.14.0
- compile
+ org.apache.maven.plugin-testing
+ maven-plugin-testing-harness
+ ${mavenPluginTestingVersion}
+ test
-
- org.apache.maven
- maven-compat
- ${mavenVersion}
+ org.junit.jupiter
+ junit-jupiter-api
test
- org.apache.maven.plugin-testing
- maven-plugin-testing-harness
- 3.3.0
+ org.apache.maven
+ maven-core
+ ${mavenVersion}
test
- junit
- junit
- 4.13.2
+ org.apache.maven
+ maven-api-impl
+ ${mavenVersion}
test
- org.apache.maven.resolver
- maven-resolver-api
- 1.6.3
+ com.google.inject
+ guice
+ 6.0.0
test
- org.slf4j
- slf4j-simple
- 1.7.36
+ org.codehaus.plexus
+ plexus-utils
test
+
+ com.diffplug.spotless
+ spotless-maven-plugin
+
+
+
+ src/**/*.java
+
+
+
+
org.apache.rat
apache-rat-plugin
@@ -191,6 +180,15 @@ under the License.
+
+ org.apache.maven.plugins
+ maven-plugin-plugin
+ ${mavenPluginPluginVersion}
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
@@ -221,26 +219,6 @@ under the License.
-
-
- org.eclipse.sisu
- sisu-maven-plugin
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
-
- test-jar
-
-
-
-
-
diff --git a/src/it/MRESOURCES-131/src/main/java/org/apache/maven/plugins/resources/it/App.java b/src/it/MRESOURCES-131/src/main/java/org/apache/maven/plugins/resources/it/App.java
index 335f585..6753d38 100644
--- a/src/it/MRESOURCES-131/src/main/java/org/apache/maven/plugins/resources/it/App.java
+++ b/src/it/MRESOURCES-131/src/main/java/org/apache/maven/plugins/resources/it/App.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
package org.apache.maven.plugins.resources.it;
/*
@@ -23,10 +41,8 @@
* Hello world!
*
*/
-public class App
-{
- public static void main( String[] args )
- {
- System.out.println( "Hello World!" );
+public class App {
+ public static void main(String[] args) {
+ System.out.println("Hello World!");
}
}
diff --git a/src/it/MRESOURCES-131/src/test/java/org/apache/maven/plugins/resources/it/AppTest.java b/src/it/MRESOURCES-131/src/test/java/org/apache/maven/plugins/resources/it/AppTest.java
index 3a2c746..9ecc76d 100644
--- a/src/it/MRESOURCES-131/src/test/java/org/apache/maven/plugins/resources/it/AppTest.java
+++ b/src/it/MRESOURCES-131/src/test/java/org/apache/maven/plugins/resources/it/AppTest.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
package org.apache.maven.plugins.resources.it;
/*
@@ -26,32 +44,27 @@
/**
* Unit test for simple App.
*/
-public class AppTest
- extends TestCase
-{
+public class AppTest extends TestCase {
/**
* Create the test case
*
* @param testName name of the test case
*/
- public AppTest( String testName )
- {
- super( testName );
+ public AppTest(String testName) {
+ super(testName);
}
/**
* @return the suite of tests being tested
*/
- public static Test suite()
- {
- return new TestSuite( AppTest.class );
+ public static Test suite() {
+ return new TestSuite(AppTest.class);
}
/**
* Rigourous Test :-)
*/
- public void testApp()
- {
- assertTrue( true );
+ public void testApp() {
+ assertTrue(true);
}
}
diff --git a/src/it/MRESOURCES-18/pom.xml b/src/it/MRESOURCES-18/pom.xml
index dca439a..153ac06 100644
--- a/src/it/MRESOURCES-18/pom.xml
+++ b/src/it/MRESOURCES-18/pom.xml
@@ -57,7 +57,7 @@ under the License.
maven-surefire-plugin
- 2.4.3
+ 3.2.1
diff --git a/src/it/MRESOURCES-18/src/test/java/org/apache/maven/it0105/FilterTest.java b/src/it/MRESOURCES-18/src/test/java/org/apache/maven/it0105/FilterTest.java
index 84d70de..1175807 100644
--- a/src/it/MRESOURCES-18/src/test/java/org/apache/maven/it0105/FilterTest.java
+++ b/src/it/MRESOURCES-18/src/test/java/org/apache/maven/it0105/FilterTest.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
package org.apache.maven.it0105;
/*
@@ -8,9 +26,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -19,51 +37,39 @@
* under the License.
*/
-
-import junit.framework.TestCase;
-
-import java.util.Properties;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.util.Properties;
+
+import junit.framework.TestCase;
-public class FilterTest
- extends TestCase
-{
+public class FilterTest extends TestCase {
private String basedir;
private Properties properties;
- protected void setUp()
- throws Exception
- {
- basedir = System.getProperty( "basedir" );
+ protected void setUp() throws Exception {
+ basedir = System.getProperty("basedir");
properties = new Properties();
- File testPropertiesFile = new File( basedir, "target/classes/test.properties" );
+ File testPropertiesFile = new File(basedir, "target/classes/test.properties");
- assertTrue( testPropertiesFile.exists() );
+ assertTrue(testPropertiesFile.exists());
- properties.load( new FileInputStream( testPropertiesFile ) );
+ properties.load(new FileInputStream(testPropertiesFile));
}
-
- public void testSystemPropertyInterpolation()
- throws IOException
- {
- assertEquals( "System property", System.getProperty( "java.version" ), properties.getProperty( "system.property" ) );
- }
- public void testCommandLineParameterInterpolation()
- throws IOException
- {
- assertEquals( "CLI Parameter", "CLI", properties.getProperty( "cli.param" ) );
- }
+ public void testSystemPropertyInterpolation() throws IOException {
+ assertEquals("System property", System.getProperty("java.version"), properties.getProperty("system.property"));
+ }
- public void testPomPropertyInterpolation()
- throws IOException
- {
- assertEquals( "Pom Property", "foo", properties.getProperty( "pom.property" ) );
- }
+ public void testCommandLineParameterInterpolation() throws IOException {
+ assertEquals("CLI Parameter", "CLI", properties.getProperty("cli.param"));
+ }
+ public void testPomPropertyInterpolation() throws IOException {
+ assertEquals("Pom Property", "foo", properties.getProperty("pom.property"));
+ }
}
diff --git a/src/it/settings.xml b/src/it/settings.xml
index 61bdd13..2b9ce5b 100644
--- a/src/it/settings.xml
+++ b/src/it/settings.xml
@@ -32,9 +32,11 @@ under the License.
@localRepositoryUrl@
true
+ ignore
true
+ ignore
@@ -42,9 +44,11 @@ under the License.
https://repository.apache.org/content/repositories/snapshots
false
+ ignore
true
+ ignore
@@ -54,9 +58,11 @@ under the License.
@localRepositoryUrl@
true
+ ignore
true
+ ignore
diff --git a/src/it/user-filters/filter/pom.xml b/src/it/user-filters/filter/pom.xml
new file mode 100644
index 0000000..a8ea5e4
--- /dev/null
+++ b/src/it/user-filters/filter/pom.xml
@@ -0,0 +1,34 @@
+
+
+
+ 4.0.0
+ org.apache.plugins.resources.its
+ user-filters-filter
+ 1.0.16-SNAPSHOT
+ jar
+
+
+ org.apache.maven.shared
+ maven-filtering
+ @mavenFilteringVersion@
+
+
+
diff --git a/src/test/java/org/apache/maven/plugins/resources/filters/ItFilter.java b/src/it/user-filters/filter/src/main/java/org/apache/maven/plugins/resources/filters/ItFilter.java
similarity index 86%
rename from src/test/java/org/apache/maven/plugins/resources/filters/ItFilter.java
rename to src/it/user-filters/filter/src/main/java/org/apache/maven/plugins/resources/filters/ItFilter.java
index c0ebd2d..6d46ca1 100644
--- a/src/test/java/org/apache/maven/plugins/resources/filters/ItFilter.java
+++ b/src/it/user-filters/filter/src/main/java/org/apache/maven/plugins/resources/filters/ItFilter.java
@@ -18,16 +18,15 @@
*/
package org.apache.maven.plugins.resources.filters;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import java.io.File;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import org.apache.commons.io.FileUtils;
+import org.apache.maven.api.di.Named;
+import org.apache.maven.api.di.Singleton;
import org.apache.maven.shared.filtering.MavenFilteringException;
import org.apache.maven.shared.filtering.MavenResourcesExecution;
import org.apache.maven.shared.filtering.MavenResourcesFiltering;
@@ -62,7 +61,7 @@ public boolean filteredFileExtension(String fileName, List userNonFilter
public void filterResources(MavenResourcesExecution mavenResourcesExecution) throws MavenFilteringException {
System.out.println("ItFilter filterResources");
try {
- File f = new File(mavenResourcesExecution.getOutputDirectory(), "foo.txt");
+ Path f = mavenResourcesExecution.getOutputDirectory().resolve("foo.txt");
List lines = new ArrayList<>();
lines.add("foo");
@@ -70,9 +69,10 @@ public void filterResources(MavenResourcesExecution mavenResourcesExecution) thr
lines.add("toto="
+ mavenResourcesExecution
.getMavenSession()
- .getSystemProperties()
- .getProperty("toto"));
- FileUtils.writeLines(f, lines);
+ .getUserProperties()
+ .get("toto"));
+ Files.createDirectories(f.getParent());
+ Files.write(f, lines);
} catch (IOException e) {
throw new MavenFilteringException(e.getMessage(), e);
}
diff --git a/src/it/user-filters/filter/src/main/resources/META-INF/maven/org.apache.maven.api.di.Inject b/src/it/user-filters/filter/src/main/resources/META-INF/maven/org.apache.maven.api.di.Inject
new file mode 100644
index 0000000..e86a5d2
--- /dev/null
+++ b/src/it/user-filters/filter/src/main/resources/META-INF/maven/org.apache.maven.api.di.Inject
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+org.apache.maven.plugins.resources.filters.ItFilter
diff --git a/src/it/user-filters/module/pom.xml b/src/it/user-filters/module/pom.xml
new file mode 100644
index 0000000..d0718e7
--- /dev/null
+++ b/src/it/user-filters/module/pom.xml
@@ -0,0 +1,64 @@
+
+
+
+ 4.0.0
+ org.apache.plugins.resources.its
+ user-filters-module
+ User Filter Resources Test
+ 1.0.16-SNAPSHOT
+
+
+
+ src/main/resources
+
+
+ true
+ src/main/filtered
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ @project.version@
+
+ UTF-8
+
+ itFilter
+
+
+
+
+ org.apache.plugins.resources.its
+ user-filters-filter
+ 1.0.16-SNAPSHOT
+
+
+
+
+
+
+ this is escaped
+ this is escaped.at
+ this is foo
+ this is bar
+
+
diff --git a/src/it/user-filters/src/main/filtered/filtered.properties b/src/it/user-filters/module/src/main/filtered/filtered.properties
similarity index 100%
rename from src/it/user-filters/src/main/filtered/filtered.properties
rename to src/it/user-filters/module/src/main/filtered/filtered.properties
diff --git a/src/it/user-filters/src/main/resources/unfiltered.properties b/src/it/user-filters/module/src/main/resources/unfiltered.properties
similarity index 100%
rename from src/it/user-filters/src/main/resources/unfiltered.properties
rename to src/it/user-filters/module/src/main/resources/unfiltered.properties
diff --git a/src/it/user-filters/pom.xml b/src/it/user-filters/pom.xml
index 7b8f887..ce5a980 100644
--- a/src/it/user-filters/pom.xml
+++ b/src/it/user-filters/pom.xml
@@ -21,45 +21,12 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
org.apache.plugins.resources.its
- user-filters
- User Filter Resources Test
+ user-filters-parent
1.0.16-SNAPSHOT
-
-
-
- src/main/resources
-
-
- true
- src/main/filtered
-
-
-
-
- org.apache.maven.plugins
- maven-resources-plugin
- @project.version@
-
- UTF-8
-
- itFilter
-
-
-
-
- org.apache.maven.plugins
- maven-resources-plugin
- @project.version@
- tests
-
-
-
-
-
-
- this is escaped
- this is escaped.at
- this is foo
- this is bar
-
+ pom
+
+
+ filter
+ module
+
diff --git a/src/it/user-filters/verify.groovy b/src/it/user-filters/verify.groovy
index 3749dc5..c4e343d 100644
--- a/src/it/user-filters/verify.groovy
+++ b/src/it/user-filters/verify.groovy
@@ -16,9 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-assert new File(basedir, 'target/classes/foo.txt').exists();
+assert new File(basedir, 'module/target/classes/foo.txt').exists();
-content = new File(basedir, 'target/classes/foo.txt').text;
+content = new File(basedir, 'module/target/classes/foo.txt').text;
assert content.contains( 'foo');
assert content.contains( 'version=1.0.16-SNAPSHOT');
assert content.contains( 'toto=titi');
diff --git a/src/main/java/org/apache/maven/plugins/resources/CopyResourcesMojo.java b/src/main/java/org/apache/maven/plugins/resources/CopyResourcesMojo.java
index 1e62e0b..8bb5c1c 100644
--- a/src/main/java/org/apache/maven/plugins/resources/CopyResourcesMojo.java
+++ b/src/main/java/org/apache/maven/plugins/resources/CopyResourcesMojo.java
@@ -18,12 +18,12 @@
*/
package org.apache.maven.plugins.resources;
-import java.io.File;
+import java.nio.file.Path;
import java.util.List;
-import org.apache.maven.model.Resource;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.api.plugin.annotations.Mojo;
+import org.apache.maven.api.plugin.annotations.Parameter;
+import org.apache.maven.shared.filtering.Resource;
/**
* Copy resources of the configured plugin attribute resources
@@ -31,14 +31,14 @@
* @author Olivier Lamy
* @since 2.3
*/
-@Mojo(name = "copy-resources", threadSafe = true)
+@Mojo(name = "copy-resources")
public class CopyResourcesMojo extends ResourcesMojo {
/**
* The output directory into which to copy the resources.
*/
@Parameter(required = true)
- private File outputDirectory;
+ private Path outputDirectory;
/**
* The list of resources we want to transfer. See the Maven Model for a
@@ -48,12 +48,12 @@ public class CopyResourcesMojo extends ResourcesMojo {
private List resources;
/** {@inheritDoc} */
- public File getOutputDirectory() {
+ public Path getOutputDirectory() {
return outputDirectory;
}
/** {@inheritDoc} */
- public void setOutputDirectory(File outputDirectory) {
+ public void setOutputDirectory(Path outputDirectory) {
this.outputDirectory = outputDirectory;
}
diff --git a/src/main/java/org/apache/maven/plugins/resources/MavenBuildTimestamp.java b/src/main/java/org/apache/maven/plugins/resources/MavenBuildTimestamp.java
index fb2f8f7..57a58e9 100644
--- a/src/main/java/org/apache/maven/plugins/resources/MavenBuildTimestamp.java
+++ b/src/main/java/org/apache/maven/plugins/resources/MavenBuildTimestamp.java
@@ -19,80 +19,61 @@
package org.apache.maven.plugins.resources;
import java.text.SimpleDateFormat;
+import java.time.Instant;
import java.util.Date;
import java.util.GregorianCalendar;
+import java.util.Map;
import java.util.Properties;
import java.util.TimeZone;
/**
- * This class is duplicated from maven-model-builder from maven core. (See MRESOURCES-99).
+ * This class is duplicated from maven-api-impl from maven core. (See MRESOURCES-99).
*/
public class MavenBuildTimestamp {
- /**
- * ISO 8601-compliant timestamp for machine readability
- */
+ // ISO 8601-compliant timestamp for machine readability
public static final String DEFAULT_BUILD_TIMESTAMP_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
- /**
- * The property name.
- */
public static final String BUILD_TIMESTAMP_FORMAT_PROPERTY = "maven.build.timestamp.format";
- /**
- * The default time zone {@code Etc/UTC}.
- */
public static final TimeZone DEFAULT_BUILD_TIME_ZONE = TimeZone.getTimeZone("Etc/UTC");
private String formattedTimestamp;
- /**
- * Create an instance.
- */
public MavenBuildTimestamp() {
- this(new Date());
+ this(Instant.now());
}
- /**
- * @param time The time to use.
- */
- public MavenBuildTimestamp(Date time) {
+ public MavenBuildTimestamp(Instant time) {
this(time, DEFAULT_BUILD_TIMESTAMP_FORMAT);
}
- /**
- * @param time The time to use.
- * @param properties the properties which can be define. can be {@code null}
- */
- public MavenBuildTimestamp(Date time, Properties properties) {
- this(time, properties != null ? properties.getProperty(BUILD_TIMESTAMP_FORMAT_PROPERTY) : null);
+ public MavenBuildTimestamp(Instant time, Map properties) {
+ this(time, properties != null ? properties.get(BUILD_TIMESTAMP_FORMAT_PROPERTY) : null);
}
/**
- * @param time The time to use.
- * @param timestampFormat The format for {@link SimpleDateFormat}.
+ *
+ * @deprecated Use {@link #MavenBuildTimestamp(Instant, Map)} or extract the format and pass it
+ * to {@link #MavenBuildTimestamp(Instant, String)} instead.
*/
- public MavenBuildTimestamp(Date time, String timestampFormat) {
- SimpleDateFormat dateFormat;
+ @Deprecated
+ public MavenBuildTimestamp(Instant time, Properties properties) {
+ this(time, properties != null ? properties.getProperty(BUILD_TIMESTAMP_FORMAT_PROPERTY) : null);
+ }
+ public MavenBuildTimestamp(Instant time, String timestampFormat) {
if (timestampFormat == null) {
- dateFormat = new SimpleDateFormat(DEFAULT_BUILD_TIMESTAMP_FORMAT);
- } else {
- dateFormat = new SimpleDateFormat(timestampFormat);
+ timestampFormat = DEFAULT_BUILD_TIMESTAMP_FORMAT;
}
-
- dateFormat.setCalendar(new GregorianCalendar());
- dateFormat.setTimeZone(DEFAULT_BUILD_TIME_ZONE);
-
if (time == null) {
- formattedTimestamp = dateFormat.format(new Date());
- } else {
- formattedTimestamp = dateFormat.format(time);
+ time = Instant.now();
}
+ SimpleDateFormat dateFormat = new SimpleDateFormat(timestampFormat);
+ dateFormat.setCalendar(new GregorianCalendar());
+ dateFormat.setTimeZone(DEFAULT_BUILD_TIME_ZONE);
+ formattedTimestamp = dateFormat.format(new Date(time.toEpochMilli()));
}
- /**
- * @return The formatted time stamp.
- */
public String formattedTimestamp() {
return formattedTimestamp;
}
diff --git a/src/main/java/org/apache/maven/plugins/resources/Resource.java b/src/main/java/org/apache/maven/plugins/resources/Providers.java
similarity index 72%
rename from src/main/java/org/apache/maven/plugins/resources/Resource.java
rename to src/main/java/org/apache/maven/plugins/resources/Providers.java
index 9f9c219..a9fe718 100644
--- a/src/main/java/org/apache/maven/plugins/resources/Resource.java
+++ b/src/main/java/org/apache/maven/plugins/resources/Providers.java
@@ -18,12 +18,16 @@
*/
package org.apache.maven.plugins.resources;
-/**
- * @author Olivier Lamy
- * @since 2.3
- *
- */
-public class Resource extends org.apache.maven.model.Resource {
- // nothing to do here just a class prevent users adding an implementation attribute
- // in the mojo configuration
+import org.apache.maven.api.di.Named;
+import org.apache.maven.api.di.Provides;
+import org.sonatype.plexus.build.incremental.BuildContext;
+import org.sonatype.plexus.build.incremental.ThreadBuildContext;
+
+@Named
+class Providers {
+
+ @Provides
+ static BuildContext buildContext() {
+ return new ThreadBuildContext();
+ }
}
diff --git a/src/main/java/org/apache/maven/plugins/resources/ResourceUtils.java b/src/main/java/org/apache/maven/plugins/resources/ResourceUtils.java
new file mode 100644
index 0000000..b6677f0
--- /dev/null
+++ b/src/main/java/org/apache/maven/plugins/resources/ResourceUtils.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.plugins.resources;
+
+import org.apache.maven.shared.filtering.Resource;
+
+class ResourceUtils {
+
+ static Resource newResource(org.apache.maven.api.model.Resource res) {
+ Resource resource = new Resource();
+ resource.setDirectory(res.getDirectory());
+ resource.setFiltering(res.isFiltering());
+ resource.setExcludes(res.getExcludes());
+ resource.setIncludes(res.getIncludes());
+ resource.setMergeId(res.getMergeId());
+ resource.setTargetPath(res.getTargetPath());
+ return resource;
+ }
+}
diff --git a/src/main/java/org/apache/maven/plugins/resources/ResourcesMojo.java b/src/main/java/org/apache/maven/plugins/resources/ResourcesMojo.java
index a622653..6f699a6 100644
--- a/src/main/java/org/apache/maven/plugins/resources/ResourcesMojo.java
+++ b/src/main/java/org/apache/maven/plugins/resources/ResourcesMojo.java
@@ -18,7 +18,7 @@
*/
package org.apache.maven.plugins.resources;
-import java.io.File;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -26,20 +26,21 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugins.annotations.Component;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.MavenProject;
+import java.util.stream.Collectors;
+
+import org.apache.maven.api.Project;
+import org.apache.maven.api.ProjectScope;
+import org.apache.maven.api.Session;
+import org.apache.maven.api.di.Inject;
+import org.apache.maven.api.plugin.Log;
+import org.apache.maven.api.plugin.MojoException;
+import org.apache.maven.api.plugin.annotations.Mojo;
+import org.apache.maven.api.plugin.annotations.Parameter;
+import org.apache.maven.api.services.ProjectManager;
import org.apache.maven.shared.filtering.MavenFilteringException;
import org.apache.maven.shared.filtering.MavenResourcesExecution;
import org.apache.maven.shared.filtering.MavenResourcesFiltering;
+import org.apache.maven.shared.filtering.Resource;
/**
* Copy resources for the main source code to the main output directory. Always uses the project.build.resources element
@@ -50,8 +51,8 @@
* @author Andreas Hoheneder
* @author William Ferguson
*/
-@Mojo(name = "resources", defaultPhase = LifecyclePhase.PROCESS_RESOURCES, requiresProject = true, threadSafe = true)
-public class ResourcesMojo extends AbstractMojo {
+@Mojo(name = "resources", defaultPhase = "process-resources", projectRequired = true)
+public class ResourcesMojo implements org.apache.maven.api.plugin.Mojo {
/**
* The character encoding to use when reading and writing filtered resources.
@@ -72,19 +73,19 @@ public class ResourcesMojo extends AbstractMojo {
* The output directory into which to copy the resources.
*/
@Parameter(defaultValue = "${project.build.outputDirectory}", required = true)
- private File outputDirectory;
+ protected Path outputDirectory;
/**
* The list of resources we want to transfer.
*/
- @Parameter(defaultValue = "${project.resources}", required = true, readonly = true)
+ @Parameter
private List resources;
/**
*
*/
- @Parameter(defaultValue = "${project}", readonly = true, required = true)
- protected MavenProject project;
+ @Inject
+ protected Project project;
/**
* The list of additional filter properties files to be used along with System and project properties, which would
@@ -125,20 +126,20 @@ public class ResourcesMojo extends AbstractMojo {
/**
*
*/
- @Component(role = MavenResourcesFiltering.class, hint = "default")
+ @Inject
protected MavenResourcesFiltering mavenResourcesFiltering;
/**
*
*/
- @Component(role = MavenResourcesFiltering.class)
+ @Inject
protected Map mavenResourcesFilteringMap;
/**
*
*/
- @Parameter(defaultValue = "${session}", readonly = true, required = true)
- protected MavenSession session;
+ @Inject
+ protected Session session;
/**
* Expressions preceded with this string won't be interpolated. Anything else preceded with this string will be
@@ -286,16 +287,27 @@ public class ResourcesMojo extends AbstractMojo {
@Parameter(property = "maven.resources.skip", defaultValue = "false")
private boolean skip;
- /**
- * {@inheritDoc}
- */
- public void execute() throws MojoExecutionException {
+ @Inject
+ private Log logger;
+
+ /** {@inheritDoc} */
+ public void execute() throws MojoException {
if (isSkip()) {
getLog().info("Skipping the execution.");
return;
}
- if (StringUtils.isBlank(encoding) && isFilteringEnabled(getResources())) {
+ if (resources == null) {
+ resources = session.getService(ProjectManager.class).getResources(project, ProjectScope.MAIN).stream()
+ .map(ResourceUtils::newResource)
+ .collect(Collectors.toList());
+ }
+
+ doExecute();
+ }
+
+ protected void doExecute() throws MojoException {
+ if ((encoding == null || encoding.isEmpty()) && isFilteringEnabled(getResources())) {
getLog().warn("File encoding has not been set, using platform encoding "
+ System.getProperty("file.encoding")
+ ". Build is platform dependent!");
@@ -344,7 +356,7 @@ public void execute() throws MojoExecutionException {
executeUserFilterComponents(mavenResourcesExecution);
} catch (MavenFilteringException e) {
- throw new MojoExecutionException(e.getMessage(), e);
+ throw new MojoException(e.getMessage(), e);
}
}
@@ -366,23 +378,20 @@ private Properties addSeveralSpecialProperties() {
String timeStamp = new MavenBuildTimestamp().formattedTimestamp();
Properties additionalProperties = new Properties();
additionalProperties.put("maven.build.timestamp", timeStamp);
- if (project.getBasedir() != null) {
- additionalProperties.put(
- "project.baseUri",
- project.getBasedir().getAbsoluteFile().toURI().toString());
- }
-
+ additionalProperties.put(
+ "project.baseUri",
+ project.getBasedir().toAbsolutePath().toFile().toURI().toString());
return additionalProperties;
}
/**
* @param mavenResourcesExecution {@link MavenResourcesExecution}
- * @throws MojoExecutionException in case of wrong lookup.
+ * @throws MojoException in case of wrong lookup.
* @throws MavenFilteringException in case of failure.
* @since 2.5
*/
protected void executeUserFilterComponents(MavenResourcesExecution mavenResourcesExecution)
- throws MojoExecutionException, MavenFilteringException {
+ throws MojoException, MavenFilteringException {
if (mavenFilteringHints != null) {
for (String hint : mavenFilteringHints) {
@@ -391,7 +400,7 @@ protected void executeUserFilterComponents(MavenResourcesExecution mavenResource
getLog().debug("added user filter component with hint: " + hint);
mavenFilteringComponents.add(userFilterComponent);
} else {
- throw new MojoExecutionException(
+ throw new MojoException(
"User filter with hint `" + hint + "` requested, but not present. Discovered filters are: "
+ mavenResourcesFilteringMap.keySet());
}
@@ -461,14 +470,14 @@ public void setResources(List resources) {
/**
* @return {@link #outputDirectory}
*/
- public File getOutputDirectory() {
+ public Path getOutputDirectory() {
return outputDirectory;
}
/**
* @param outputDirectory the output folder.
*/
- public void setOutputDirectory(File outputDirectory) {
+ public void setOutputDirectory(Path outputDirectory) {
this.outputDirectory = outputDirectory;
}
@@ -548,4 +557,8 @@ public void setUseDefaultDelimiters(boolean useDefaultDelimiters) {
public boolean isSkip() {
return skip;
}
+
+ protected Log getLog() {
+ return logger;
+ }
}
diff --git a/src/main/java/org/apache/maven/plugins/resources/TestResourcesMojo.java b/src/main/java/org/apache/maven/plugins/resources/TestResourcesMojo.java
index f7a1ada..ac90676 100644
--- a/src/main/java/org/apache/maven/plugins/resources/TestResourcesMojo.java
+++ b/src/main/java/org/apache/maven/plugins/resources/TestResourcesMojo.java
@@ -18,14 +18,16 @@
*/
package org.apache.maven.plugins.resources;
-import java.io.File;
+import java.nio.file.Path;
import java.util.List;
+import java.util.stream.Collectors;
-import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.api.ProjectScope;
+import org.apache.maven.api.plugin.MojoException;
+import org.apache.maven.api.plugin.annotations.Mojo;
+import org.apache.maven.api.plugin.annotations.Parameter;
+import org.apache.maven.api.services.ProjectManager;
+import org.apache.maven.shared.filtering.Resource;
/**
* Copy resources for the test source code to the test output directory.
@@ -34,22 +36,18 @@
* @author Michal Maczka
* @author Jason van Zyl
*/
-@Mojo(
- name = "testResources",
- defaultPhase = LifecyclePhase.PROCESS_TEST_RESOURCES,
- requiresProject = true,
- threadSafe = true)
+@Mojo(name = "testResources", defaultPhase = "process-test-resources", projectRequired = true)
public class TestResourcesMojo extends ResourcesMojo {
/**
* The output directory into which to copy the resources.
*/
@Parameter(defaultValue = "${project.build.testOutputDirectory}", required = true)
- private File outputDirectory;
+ private Path outputDirectory;
/**
* The list of resources we want to transfer.
*/
- @Parameter(defaultValue = "${project.testResources}", required = true)
+ @Parameter
private List resources;
/**
@@ -63,21 +61,28 @@ public class TestResourcesMojo extends ResourcesMojo {
/**
* {@inheritDoc}
*/
- public void execute() throws MojoExecutionException {
+ public void execute() throws MojoException {
if (skip) {
getLog().info("Not copying test resources");
- } else {
- super.execute();
+ return;
}
+
+ if (resources == null) {
+ resources = session.getService(ProjectManager.class).getResources(project, ProjectScope.TEST).stream()
+ .map(ResourceUtils::newResource)
+ .collect(Collectors.toList());
+ }
+
+ super.doExecute();
}
/** {@inheritDoc} */
- public File getOutputDirectory() {
+ public Path getOutputDirectory() {
return outputDirectory;
}
/** {@inheritDoc} */
- public void setOutputDirectory(File outputDirectory) {
+ public void setOutputDirectory(Path outputDirectory) {
this.outputDirectory = outputDirectory;
}
diff --git a/src/test/java/org/apache/maven/plugins/resources/AbstractPropertyUtilsTest.java b/src/test/java/org/apache/maven/plugins/resources/AbstractPropertyUtilsTest.java
index 2f7579b..f186998 100644
--- a/src/test/java/org/apache/maven/plugins/resources/AbstractPropertyUtilsTest.java
+++ b/src/test/java/org/apache/maven/plugins/resources/AbstractPropertyUtilsTest.java
@@ -18,33 +18,33 @@
*/
package org.apache.maven.plugins.resources;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.Enumeration;
import java.util.Properties;
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-import org.codehaus.plexus.util.IOUtil;
+import org.junit.jupiter.api.BeforeEach;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
/**
* Base class for propertyutils test case
*/
-public abstract class AbstractPropertyUtilsTest extends AbstractMojoTestCase {
- protected File propertyFile;
+public abstract class AbstractPropertyUtilsTest {
+ protected Path propertyFile;
- protected File validationFile;
+ protected Path validationFile;
protected Properties validationProp;
- protected abstract File getPropertyFile();
+ protected abstract Path getPropertyFile();
- protected abstract File getValidationFile();
+ protected abstract Path getValidationFile();
+ @BeforeEach
protected void setUp() throws Exception {
- super.setUp();
-
// load data
propertyFile = getPropertyFile();
assertNotNull(propertyFile);
@@ -78,19 +78,12 @@ protected boolean validateProperties(Properties prop) {
*
* @param validationPropFile
*/
- private void loadValidationProperties(File validationPropFile) {
+ private void loadValidationProperties(Path validationPropFile) {
validationProp = new Properties();
- InputStream in = null;
-
- try {
- in = Files.newInputStream(validationPropFile.toPath());
+ try (InputStream in = Files.newInputStream(validationPropFile)) {
validationProp.load(in);
- in.close();
- in = null;
} catch (IOException ex) {
// TODO: do error handling
- } finally {
- IOUtil.close(in);
}
}
}
diff --git a/src/test/java/org/apache/maven/plugins/resources/BasicPropertyUtilsTest.java b/src/test/java/org/apache/maven/plugins/resources/BasicPropertyUtilsTest.java
index 9d31283..e7ceb0c 100644
--- a/src/test/java/org/apache/maven/plugins/resources/BasicPropertyUtilsTest.java
+++ b/src/test/java/org/apache/maven/plugins/resources/BasicPropertyUtilsTest.java
@@ -18,31 +18,41 @@
*/
package org.apache.maven.plugins.resources;
-import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.Properties;
+import org.apache.maven.api.plugin.testing.MojoTest;
import org.apache.maven.shared.filtering.PropertyUtils;
+import org.junit.jupiter.api.Test;
+import static org.apache.maven.api.plugin.testing.MojoExtension.getBasedir;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+@MojoTest
public class BasicPropertyUtilsTest extends AbstractPropertyUtilsTest {
protected static final String validationFileName =
- "/target/test-classes/unit/propertiesutils-test/basic_validation.properties";
+ "target/test-classes/unit/propertiesutils-test/basic_validation.properties";
- protected static final String propFileName = "/target/test-classes/unit/propertiesutils-test/basic.properties";
+ protected static final String propFileName = "target/test-classes/unit/propertiesutils-test/basic.properties";
- protected File getPropertyFile() {
- File propFile = new File(getBasedir(), propFileName);
+ protected Path getPropertyFile() {
+ Path propFile = Paths.get(getBasedir(), propFileName);
- if (!propFile.exists()) {
+ if (!Files.exists(propFile)) {
propFile = null;
}
return propFile;
}
- protected File getValidationFile() {
- File validationFile = new File(getBasedir(), validationFileName);
+ protected Path getValidationFile() {
+ Path validationFile = Paths.get(getBasedir(), validationFileName);
- if (!validationFile.exists()) {
+ if (!Files.exists(validationFile)) {
validationFile = null;
}
@@ -54,6 +64,7 @@ protected File getValidationFile() {
*
* @throws Exception
*/
+ @Test
public void testBasicLoadProperty_FF() throws Exception {
Properties prop = PropertyUtils.loadPropertyFile(propertyFile, false, false);
@@ -66,6 +77,7 @@ public void testBasicLoadProperty_FF() throws Exception {
*
* @throws Exception
*/
+ @Test
public void testBasicLoadProperty_TF() throws Exception {
Properties prop = PropertyUtils.loadPropertyFile(propertyFile, true, false);
@@ -78,6 +90,7 @@ public void testBasicLoadProperty_TF() throws Exception {
*
* @throws Exception
*/
+ @Test
public void testBasicLoadProperty_TT() throws Exception {
Properties prop = PropertyUtils.loadPropertyFile(propertyFile, true, true);
@@ -91,6 +104,7 @@ public void testBasicLoadProperty_TT() throws Exception {
*
* @throws Exception
*/
+ @Test
public void testNonExistentProperty() throws Exception {
Properties prop = PropertyUtils.loadPropertyFile(propertyFile, true, true);
diff --git a/src/test/java/org/apache/maven/plugins/resources/CopyResourcesMojoTest.java b/src/test/java/org/apache/maven/plugins/resources/CopyResourcesMojoTest.java
index e951fc1..6c928d1 100644
--- a/src/test/java/org/apache/maven/plugins/resources/CopyResourcesMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/resources/CopyResourcesMojoTest.java
@@ -18,51 +18,61 @@
*/
package org.apache.maven.plugins.resources;
-import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.Collections;
-import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.di.Provides;
+import org.apache.maven.api.di.Singleton;
+import org.apache.maven.api.plugin.testing.Basedir;
+import org.apache.maven.api.plugin.testing.InjectMojo;
+import org.apache.maven.api.plugin.testing.MojoTest;
+import org.apache.maven.api.plugin.testing.stubs.SessionMock;
+import org.apache.maven.internal.impl.InternalSession;
import org.apache.maven.plugins.resources.stub.MavenProjectResourcesStub;
-import org.codehaus.plexus.util.FileUtils;
+import org.apache.maven.shared.filtering.Resource;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtensionContext;
+
+import static org.apache.maven.api.plugin.testing.MojoExtension.*;
+import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author Olivier Lamy
* @version $Id$
*/
-public class CopyResourcesMojoTest extends AbstractMojoTestCase {
-
- protected static final String defaultPomFilePath = "/target/test-classes/unit/resources-test/plugin-config.xml";
-
- File outputDirectory = new File(getBasedir(), "/target/copyResourcesTests");
-
- protected void setUp() throws Exception {
- super.setUp();
- if (!outputDirectory.exists()) {
- outputDirectory.mkdirs();
- } else {
- FileUtils.cleanDirectory(outputDirectory);
- }
- }
-
- public void testCopyWithoutFiltering() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
-
- mojo.setOutputDirectory(outputDirectory);
+@MojoTest
+public class CopyResourcesMojoTest {
+ @Test
+ @InjectMojo(goal = "resources", pom = "classpath:/unit/resources-test/plugin-config.xml")
+ @Basedir
+ public void testCopyWithoutFiltering(ResourcesMojo mojo) throws Exception {
Resource resource = new Resource();
- resource.setDirectory(getBasedir() + "/src/test/unit-files/copy-resources-test/no-filter");
+ resource.setDirectory(getPluginBasedir() + "/src/test/unit-files/copy-resources-test/no-filter");
resource.setFiltering(false);
-
mojo.setResources(Collections.singletonList(resource));
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("CopyResourcesMojoTest");
- File targetFile = new File(getBasedir(), "/target/copyResourcesTests");
- project.setBaseDir(targetFile);
- setVariableValueToObject(mojo, "project", project);
mojo.execute();
- assertTrue(new File(targetFile, "config.properties").exists());
+ Path result = mojo.outputDirectory.resolve("config.properties");
+ assertTrue(Files.exists(result), result + " does not exist");
+ }
+
+ private static final String LOCAL_REPO = "/target/local-repo";
+
+ @Provides
+ @Singleton
+ @SuppressWarnings("unused")
+ private static InternalSession getMockSession() {
+ return SessionMock.getMockSession(getBasedir() + LOCAL_REPO);
+ }
+
+ @Provides
+ @Singleton
+ @SuppressWarnings("unused")
+ private static Project createProject(ExtensionContext context) throws Exception {
+ return new MavenProjectResourcesStub();
}
}
diff --git a/src/test/java/org/apache/maven/plugins/resources/PropertyUtilsExceptionTest.java b/src/test/java/org/apache/maven/plugins/resources/PropertyUtilsExceptionTest.java
index 18f5aa1..915e084 100644
--- a/src/test/java/org/apache/maven/plugins/resources/PropertyUtilsExceptionTest.java
+++ b/src/test/java/org/apache/maven/plugins/resources/PropertyUtilsExceptionTest.java
@@ -18,21 +18,23 @@
*/
package org.apache.maven.plugins.resources;
-import java.io.File;
import java.io.FileNotFoundException;
+import java.nio.file.Paths;
import org.apache.maven.shared.filtering.PropertyUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
public class PropertyUtilsExceptionTest {
/**
* load property test case can be adjusted by modifying the basic.properties and basic_validation properties
- *
- * @throws Exception
*/
- @Test(expected = FileNotFoundException.class)
- public void loadPropertyFileShouldFailWithFileNotFoundException() throws Exception {
- PropertyUtils.loadPropertyFile(new File("NON_EXISTENT_FILE"), true, true);
+ @Test
+ public void loadPropertyFileShouldFailWithFileNotFoundException() {
+ assertThrows(
+ FileNotFoundException.class,
+ () -> PropertyUtils.loadPropertyFile(Paths.get("NON_EXISTENT_FILE"), true, true));
}
}
diff --git a/src/test/java/org/apache/maven/plugins/resources/ResourcesMojoTest.java b/src/test/java/org/apache/maven/plugins/resources/ResourcesMojoTest.java
index cfac851..a79d68a 100644
--- a/src/test/java/org/apache/maven/plugins/resources/ResourcesMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/resources/ResourcesMojoTest.java
@@ -19,49 +19,61 @@
package org.apache.maven.plugins.resources;
import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
-
-import org.apache.maven.execution.DefaultMavenExecutionRequest;
-import org.apache.maven.execution.MavenExecutionRequest;
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import java.util.stream.Collectors;
+
+import org.apache.maven.api.Project;
+import org.apache.maven.api.di.Provides;
+import org.apache.maven.api.di.Singleton;
+import org.apache.maven.api.plugin.testing.Basedir;
+import org.apache.maven.api.plugin.testing.InjectMojo;
+import org.apache.maven.api.plugin.testing.MojoTest;
+import org.apache.maven.api.plugin.testing.stubs.SessionMock;
+import org.apache.maven.internal.impl.InternalSession;
import org.apache.maven.plugins.resources.stub.MavenProjectResourcesStub;
-import org.codehaus.plexus.util.FileUtils;
+import org.apache.maven.shared.filtering.Resource;
+import org.junit.jupiter.api.Test;
+
+import static org.apache.maven.api.plugin.testing.MojoExtension.getBasedir;
+import static org.apache.maven.api.plugin.testing.MojoExtension.setVariableValueToObject;
+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;
-public class ResourcesMojoTest extends AbstractMojoTestCase {
- protected static final String defaultPomFilePath = "/target/test-classes/unit/resources-test/plugin-config.xml";
+@MojoTest
+public class ResourcesMojoTest {
+
+ private static final String CONFIG_XML = "classpath:/unit/resources-test/plugin-config.xml";
/**
* test mojo lookup, test harness should be working fine
- *
- * @throws Exception
*/
- public void testHarnessEnvironment() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testHarnessEnvironment(ResourcesMojo mojo) {
assertNotNull(mojo);
}
/**
- * @throws Exception
*/
- public void testResourceDirectoryStructure() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("resourceDirectoryStructure");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testResourceDirectoryStructure(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
project.addFile("file4.txt");
project.addFile("package/file3.nottest");
project.addFile("notpackage/file1.include");
@@ -70,33 +82,31 @@ public void testResourceDirectoryStructure() throws Exception {
project.setupBuildEnvironment();
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
String resourcesDir = project.getOutputDirectory();
- assertTrue(FileUtils.fileExists(resourcesDir + "/file4.txt"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/package/file3.nottest"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/notpackage/file1.include"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/package/test"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/notpackage/test"));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/file4.txt")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/package/file3.nottest")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/notpackage/file1.include")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/package/test")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/notpackage/test")));
}
/**
- * @throws Exception
*/
- public void testResourceDirectoryStructure_RelativePath() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("resourceDirectoryStructure_RelativePath");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testResourceDirectoryStructure_RelativePath(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
project.setOutputDirectory("../relative_dir");
project.addFile("file4.txt");
project.addFile("package/file3.nottest");
@@ -105,63 +115,59 @@ public void testResourceDirectoryStructure_RelativePath() throws Exception {
project.addFile("notpackage/test/file2.txt");
project.setupBuildEnvironment();
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
+ setVariableValueToObject(mojo, "resources", getResources(project));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
String resourcesDir = project.getOutputDirectory();
- assertTrue(FileUtils.fileExists(resourcesDir + "/file4.txt"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/package/file3.nottest"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/notpackage/file1.include"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/package/test"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/notpackage/test"));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/file4.txt")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/package/file3.nottest")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/notpackage/file1.include")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/package/test")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/notpackage/test")));
}
/**
- * @throws Exception
*/
- public void testResourceEncoding() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("encoding");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testResourceEncoding(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
project.addFile("file4.txt");
- project.setResourceFiltering(0, true);
+ project.setResourceFiltering(true);
project.setupBuildEnvironment();
setVariableValueToObject(mojo, "encoding", "UTF-8");
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
String resourcesDir = project.getOutputDirectory();
- assertTrue(FileUtils.fileExists(resourcesDir + "/file4.txt"));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/file4.txt")));
}
/**
- * @throws Exception
*/
- public void testResourceInclude() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("resourceInclude");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testResourceInclude(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
project.addFile("file1.include");
project.addFile("file2.exclude");
project.addFile("file3.nottest");
@@ -185,34 +191,32 @@ public void testResourceInclude() throws Exception {
project.addInclude("**/test/file*");
project.addInclude("**/package/*.include");
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
+ setVariableValueToObject(mojo, "resources", getResources(project));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
String resourcesDir = project.getOutputDirectory();
- assertTrue(FileUtils.fileExists(resourcesDir + "/package/test"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/file1.include"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/package/file1.include"));
- assertFalse(FileUtils.fileExists(resourcesDir + "/notpackage/file1.include"));
- assertFalse(FileUtils.fileExists(resourcesDir + "/notpackage/nottest/file.txt"));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/package/test")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/file1.include")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/package/file1.include")));
+ assertFalse(Files.exists(Paths.get(resourcesDir + "/notpackage/file1.include")));
+ assertFalse(Files.exists(Paths.get(resourcesDir + "/notpackage/nottest/file.txt")));
}
/**
- * @throws Exception
*/
- public void testResourceExclude() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("resourceExclude");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testResourceExclude(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
project.addFile("file1.include");
project.addFile("file2.exclude");
project.addFile("file3.nottest");
@@ -237,34 +241,32 @@ public void testResourceExclude() throws Exception {
project.addExclude("**/notpackage*");
project.addExclude("**/notpackage*/**");
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
+ setVariableValueToObject(mojo, "resources", getResources(project));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
String resourcesDir = project.getOutputDirectory();
- assertTrue(FileUtils.fileExists(resourcesDir + "/package/test"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/file1.include"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/package/file1.include"));
- assertFalse(FileUtils.fileExists(resourcesDir + "/notpackage/file1.include"));
- assertFalse(FileUtils.fileExists(resourcesDir + "/notpackage/nottest/file.txt"));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/package/test")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/file1.include")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/package/file1.include")));
+ assertFalse(Files.exists(Paths.get(resourcesDir + "/notpackage/file1.include")));
+ assertFalse(Files.exists(Paths.get(resourcesDir + "/notpackage/nottest/file.txt")));
}
/**
- * @throws Exception
*/
- public void testResourceTargetPath() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("resourceTargetPath");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testResourceTargetPath(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
project.setTargetPath("org/apache/maven/plugin/test");
project.addFile("file4.txt");
@@ -274,90 +276,82 @@ public void testResourceTargetPath() throws Exception {
project.addFile("notpackage/test/file2.txt");
project.setupBuildEnvironment();
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
+ setVariableValueToObject(mojo, "resources", getResources(project));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
String resourcesDir = project.getOutputDirectory();
- assertTrue(FileUtils.fileExists(resourcesDir + "/org/apache/maven/plugin/test/file4.txt"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/org/apache/maven/plugin/test/package/file3.nottest"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/org/apache/maven/plugin/test/notpackage/file1.include"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/org/apache/maven/plugin/test/package/test"));
- assertTrue(FileUtils.fileExists(resourcesDir + "/org/apache/maven/plugin/test/notpackage/test"));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/org/apache/maven/plugin/test/file4.txt")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/org/apache/maven/plugin/test/package/file3.nottest")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/org/apache/maven/plugin/test/notpackage/file1.include")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/org/apache/maven/plugin/test/package/test")));
+ assertTrue(Files.exists(Paths.get(resourcesDir + "/org/apache/maven/plugin/test/notpackage/test")));
}
/**
- * @throws Exception
*/
- public void testResourceSystemProperties_Filtering() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("resourceSystemProperties_Filtering");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testResourceSystemProperties_Filtering(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
project.addFile("file4.txt", "current-working-directory = ${user.dir}");
- project.setResourceFiltering(0, true);
+ project.setResourceFiltering(true);
project.setupBuildEnvironment();
// setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
setVariableValueToObject(mojo, "escapeWindowsPaths", Boolean.TRUE);
- MavenExecutionRequest request = new DefaultMavenExecutionRequest();
- request.setSystemProperties(System.getProperties());
+ mojo.session.getSystemProperties().put("user.dir", System.getProperty("user.dir"));
- MavenSession mavenSession = new MavenSession(null, null, request, null);
- setVariableValueToObject(mojo, "session", mavenSession);
mojo.execute();
String resourcesDir = project.getOutputDirectory();
- File userDir = new File(System.getProperty("user.dir"));
- assertTrue(userDir.exists());
+ Path userDir = Paths.get(System.getProperty("user.dir"));
+ assertTrue(Files.exists(userDir));
Properties props = new Properties();
- try (FileInputStream inStream = new FileInputStream(new File(resourcesDir, "file4.txt"))) {
+ try (InputStream inStream = Files.newInputStream(Paths.get(resourcesDir, "file4.txt"))) {
props.load(inStream);
}
- File fileFromFiltering = new File(props.getProperty("current-working-directory"));
+ Path fileFromFiltering = Paths.get(props.getProperty("current-working-directory"));
- assertTrue(fileFromFiltering.getAbsolutePath() + " does not exist.", fileFromFiltering.exists());
- assertEquals(userDir.getAbsolutePath(), fileFromFiltering.getAbsolutePath());
+ assertTrue(Files.exists(fileFromFiltering), fileFromFiltering.toAbsolutePath() + " does not exist.");
+ assertEquals(userDir.toAbsolutePath(), fileFromFiltering.toAbsolutePath());
}
/**
- * @throws Exception
*/
- public void testResourceProjectProperties_Filtering() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("resourceProjectProperties_Filtering");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testResourceProjectProperties_Filtering(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
project.addFile("file4.txt", "current working directory = ${user.dir}");
- project.setResourceFiltering(0, true);
+ project.setResourceFiltering(true);
project.addProperty("user.dir", "FPJ kami!!!");
project.setupBuildEnvironment();
// setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
@@ -369,19 +363,17 @@ public void testResourceProjectProperties_Filtering() throws Exception {
}
/**
- * @throws Exception
*/
- public void testProjectProperty_Filtering_PropertyDestination() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project =
- new MavenProjectResourcesStub("resourcePojectProperty_Filtering_PropertyDestination");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testProjectProperty_Filtering_PropertyDestination(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
project.addFile("file4.properties", "current working directory=${description}");
- project.setResourceFiltering(0, true);
+ project.setResourceFiltering(true);
project.setupBuildEnvironment();
// setup dummy property
@@ -389,9 +381,8 @@ public void testProjectProperty_Filtering_PropertyDestination() throws Exception
// setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
setVariableValueToObject(mojo, "escapeWindowsPaths", Boolean.TRUE);
@@ -404,28 +395,27 @@ public void testProjectProperty_Filtering_PropertyDestination() throws Exception
}
/**
- * @throws Exception
*/
- public void testPropertyFiles_Filtering() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("resourcePropertyFiles_Filtering");
- List resources = project.getBuild().getResources();
- LinkedList filterList = new LinkedList<>();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testPropertyFiles_Filtering(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
+ LinkedList filterList = new LinkedList<>();
+
project.addFile("file4.properties", "current working directory=${dir}");
project.addFile("filter.properties", "dir:testdir");
- project.setResourceFiltering(0, true);
+ project.setResourceFiltering(true);
project.setupBuildEnvironment();
filterList.add(project.getResourcesDirectory() + "filter.properties");
// setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", filterList);
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
@@ -437,28 +427,27 @@ public void testPropertyFiles_Filtering() throws Exception {
}
/**
- * @throws Exception
*/
- public void testPropertyFiles_Extra() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("resourcePropertyFiles_Extra");
- List resources = project.getBuild().getResources();
- LinkedList filterList = new LinkedList<>();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testPropertyFiles_Extra(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
+ LinkedList filterList = new LinkedList<>();
+
project.addFile("extra.properties", "current working directory=${dir}");
project.addFile("filter.properties", "dir:testdir");
- project.setResourceFiltering(0, true);
+ project.setResourceFiltering(true);
project.setupBuildEnvironment();
filterList.add(project.getResourcesDirectory() + "filter.properties");
// setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "filters", filterList);
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
@@ -470,22 +459,22 @@ public void testPropertyFiles_Extra() throws Exception {
}
/**
- * @throws Exception
*/
- public void testPropertyFiles_MainAndExtra() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("resourcePropertyFiles_MainAndExtra");
- List resources = project.getBuild().getResources();
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testPropertyFiles_MainAndExtra(ResourcesMojo mojo) throws Exception {
+ assertNotNull(mojo);
+
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
LinkedList filterList = new LinkedList<>();
LinkedList extraFilterList = new LinkedList<>();
- assertNotNull(mojo);
-
project.addFile("main-extra.properties", "current working directory=${dir}; old working directory=${dir2}");
project.addFile("filter.properties", "dir:testdir");
project.addFile("extra-filter.properties", "dir2:testdir2");
- project.setResourceFiltering(0, true);
+ project.setResourceFiltering(true);
project.cleanBuildEnvironment();
project.setupBuildEnvironment();
@@ -495,9 +484,8 @@ public void testPropertyFiles_MainAndExtra() throws Exception {
// setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", filterList);
setVariableValueToObject(mojo, "filters", extraFilterList);
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
@@ -506,38 +494,36 @@ public void testPropertyFiles_MainAndExtra() throws Exception {
String resourcesDir = project.getOutputDirectory();
String checkString = "current working directory=testdir; old working directory=testdir2";
- File file = new File(resourcesDir, "main-extra.properties");
- assertContent(file.getAbsolutePath(), checkString);
+ Path file = Paths.get(resourcesDir, "main-extra.properties");
+ assertContent(file.toAbsolutePath().toString(), checkString);
}
/**
* Validates that a Filter token containing a project property will be resolved before the Filter is applied to the
* resources.
*
- * @throws Exception
*/
- public void testPropertyFiles_Filtering_TokensInFilters() throws Exception {
- final File testPom = new File(getBasedir(), defaultPomFilePath);
- final ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- final MavenProjectResourcesStub project =
- new MavenProjectResourcesStub("resourcePropertyFiles_Filtering_TokensInFilters");
- final List resources = project.getBuild().getResources();
- final LinkedList filterList = new LinkedList<>();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testPropertyFiles_Filtering_TokensInFilters(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
+ LinkedList filterList = new LinkedList<>();
+
project.addFile("file4.properties", "current working directory=${filter.token}");
project.addFile("filter.properties", "filter.token=${pom-property}");
- project.setResourceFiltering(0, true);
+ project.setResourceFiltering(true);
project.addProperty("pom-property", "foobar");
project.setupBuildEnvironment();
filterList.add(project.getResourcesDirectory() + "filter.properties");
// setVariableValueToObject(mojo,"encoding","UTF-8");
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", filterList);
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
@@ -548,27 +534,26 @@ public void testPropertyFiles_Filtering_TokensInFilters() throws Exception {
assertContent(resourcesDir + "/file4.properties", checkString);
}
- public void testWindowsPathEscapingDisabled() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("windows-paths");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testWindowsPathEscapingDisabled(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
- project.getProperties().setProperty("basePath", "C:\\Users\\Administrator");
- project.getProperties().setProperty("docsPath", "${basePath}\\Documents");
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
+ project.addProperty("basePath", "C:\\Users\\Administrator");
+ project.addProperty("docsPath", "${basePath}\\Documents");
project.addFile("path-listing.txt", "base path is ${basePath}\ndocuments path is ${docsPath}");
- project.setResourceFiltering(0, true);
+ project.setResourceFiltering(true);
project.cleanBuildEnvironment();
project.setupBuildEnvironment();
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
setVariableValueToObject(mojo, "escapeWindowsPaths", Boolean.FALSE);
@@ -577,34 +562,33 @@ public void testWindowsPathEscapingDisabled() throws Exception {
String resourcesDir = project.getOutputDirectory();
- assertTrue(FileUtils.fileExists(new File(resourcesDir, "path-listing.txt").getAbsolutePath()));
+ assertTrue(Files.exists(Paths.get(resourcesDir, "path-listing.txt").toAbsolutePath()));
assertEquals(
"base path is C:\\Users\\Administrator\ndocuments path is C:\\Users\\Administrator\\Documents",
- FileUtils.fileRead(new File(resourcesDir, "path-listing.txt")));
+ new String(Files.readAllBytes(Paths.get(resourcesDir, "path-listing.txt"))));
}
- public void testWindowsPathEscapingEnabled() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("resources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("windows-paths");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "resources", pom = CONFIG_XML)
+ @Basedir
+ public void testWindowsPathEscapingEnabled(ResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
- project.getProperties().setProperty("basePath", "C:\\Users\\Administrator");
- project.getProperties().setProperty("docsPath", "${basePath}\\Documents");
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
+ project.addProperty("basePath", "C:\\Users\\Administrator");
+ project.addProperty("docsPath", "${basePath}\\Documents");
project.addFile("path-listing.txt", "base path is ${basePath}\ndocuments path is ${docsPath}");
- project.setResourceFiltering(0, true);
+ project.setResourceFiltering(true);
project.cleanBuildEnvironment();
project.setupBuildEnvironment();
setVariableValueToObject(mojo, "project", project);
- setVariableValueToObject(mojo, "resources", resources);
- setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getOutputDirectory()));
+ setVariableValueToObject(mojo, "resources", getResources(project));
+ setVariableValueToObject(mojo, "outputDirectory", Paths.get(project.getOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
@@ -614,20 +598,42 @@ public void testWindowsPathEscapingEnabled() throws Exception {
String resourcesDir = project.getOutputDirectory();
- assertTrue(FileUtils.fileExists(new File(resourcesDir, "path-listing.txt").getAbsolutePath()));
+ assertTrue(Files.exists(Paths.get(resourcesDir, "path-listing.txt").toAbsolutePath()));
assertEquals(
"base path is C:\\\\Users\\\\Administrator\ndocuments path is C:\\\\Users\\\\Administrator\\\\Documents",
- FileUtils.fileRead(new File(resourcesDir, "path-listing.txt")));
+ new String(Files.readAllBytes(Paths.get(resourcesDir, "path-listing.txt"))));
}
/**
* Ensures the file exists and its first line equals the given data.
*/
private void assertContent(String fileName, String data) throws IOException {
- assertTrue(FileUtils.fileExists(fileName));
- try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
+ assertTrue(Files.exists(Paths.get(fileName)));
+ try (BufferedReader reader = Files.newBufferedReader(Paths.get(fileName))) {
assertEquals(data, reader.readLine());
}
}
+
+ private static final String LOCAL_REPO = "/target/local-repo";
+
+ @Provides
+ @Singleton
+ @SuppressWarnings("unused")
+ private static InternalSession getMockSession() {
+ return SessionMock.getMockSession(getBasedir() + LOCAL_REPO);
+ }
+
+ @Provides
+ @Singleton
+ @SuppressWarnings("unused")
+ private static Project createProject() throws Exception {
+ return new MavenProjectResourcesStub();
+ }
+
+ private List getResources(MavenProjectResourcesStub project) {
+ return project.getBuild().getResources().stream()
+ .map(ResourceUtils::newResource)
+ .collect(Collectors.toList());
+ }
}
diff --git a/src/test/java/org/apache/maven/plugins/resources/TestResourcesTest.java b/src/test/java/org/apache/maven/plugins/resources/TestResourcesTest.java
index 13acc44..345bd14 100644
--- a/src/test/java/org/apache/maven/plugins/resources/TestResourcesTest.java
+++ b/src/test/java/org/apache/maven/plugins/resources/TestResourcesTest.java
@@ -18,45 +18,55 @@
*/
package org.apache.maven.plugins.resources;
-import java.io.File;
+import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
+import java.util.stream.Collectors;
-import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.di.Provides;
+import org.apache.maven.api.di.Singleton;
+import org.apache.maven.api.plugin.testing.Basedir;
+import org.apache.maven.api.plugin.testing.InjectMojo;
+import org.apache.maven.api.plugin.testing.MojoTest;
+import org.apache.maven.api.plugin.testing.stubs.SessionMock;
+import org.apache.maven.internal.impl.InternalSession;
import org.apache.maven.plugins.resources.stub.MavenProjectResourcesStub;
+import org.apache.maven.shared.filtering.Resource;
import org.codehaus.plexus.util.FileUtils;
+import org.junit.jupiter.api.Test;
-public class TestResourcesTest extends AbstractMojoTestCase {
- protected static final String defaultPomFilePath = "/target/test-classes/unit/resources-test/plugin-config.xml";
+import static org.apache.maven.api.plugin.testing.MojoExtension.getBasedir;
+import static org.apache.maven.api.plugin.testing.MojoExtension.setVariableValueToObject;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
- protected void setUp() throws Exception {
- super.setUp();
- }
+@MojoTest
+public class TestResourcesTest {
+ private static final String CONFIG_XML = "classpath:/unit/resources-test/plugin-config.xml";
/**
* test mojo lookup, test harness should be working fine
- *
- * @throws Exception
*/
- public void testHarnessEnvironment() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- ResourcesMojo mojo = (ResourcesMojo) lookupMojo("testResources", testPom);
-
+ @Test
+ @InjectMojo(goal = "testResources", pom = CONFIG_XML)
+ @Basedir
+ public void testHarnessEnvironment(TestResourcesMojo mojo) {
assertNotNull(mojo);
}
/**
- * @throws Exception
*/
- public void testTestResourceDirectoryCreation() throws Exception {
- File testPom = new File(getBasedir(), defaultPomFilePath);
- TestResourcesMojo mojo = (TestResourcesMojo) lookupMojo("testResources", testPom);
- MavenProjectResourcesStub project = new MavenProjectResourcesStub("testResourceDirectoryStructure");
- List resources = project.getBuild().getResources();
-
+ @Test
+ @InjectMojo(goal = "testResources", pom = CONFIG_XML)
+ @Basedir
+ public void testTestResourceDirectoryCreation(TestResourcesMojo mojo) throws Exception {
assertNotNull(mojo);
+ MavenProjectResourcesStub project = (MavenProjectResourcesStub) mojo.project;
+
+ List resources = getResources(project);
+
project.addFile("file4.txt");
project.addFile("package/file3.nottest");
project.addFile("notpackage/file1.include");
@@ -67,17 +77,39 @@ public void testTestResourceDirectoryCreation() throws Exception {
setVariableValueToObject(mojo, "project", project);
setVariableValueToObject(mojo, "resources", resources);
setVariableValueToObject(
- mojo, "outputDirectory", new File(project.getBuild().getTestOutputDirectory()));
+ mojo, "outputDirectory", Paths.get(project.getBuild().getTestOutputDirectory()));
setVariableValueToObject(mojo, "buildFilters", Collections.emptyList());
setVariableValueToObject(mojo, "useBuildFilters", Boolean.TRUE);
mojo.execute();
- String resorucesDir = project.getTestOutputDirectory();
+ String resourcesDir = project.getTestOutputDirectory();
+
+ assertTrue(FileUtils.fileExists(resourcesDir + "/file4.txt"));
+ assertTrue(FileUtils.fileExists(resourcesDir + "/package/file3.nottest"));
+ assertTrue(FileUtils.fileExists(resourcesDir + "/notpackage/file1.include"));
+ assertTrue(FileUtils.fileExists(resourcesDir + "/package/test"));
+ assertTrue(FileUtils.fileExists(resourcesDir + "/notpackage/test"));
+ }
+
+ private static final String LOCAL_REPO = "/target/local-repo";
+
+ @Provides
+ @Singleton
+ @SuppressWarnings("unused")
+ private static InternalSession getMockSession() {
+ return SessionMock.getMockSession(getBasedir() + LOCAL_REPO);
+ }
+
+ @Provides
+ @Singleton
+ @SuppressWarnings("unused")
+ private static Project createProject() throws Exception {
+ return new MavenProjectResourcesStub();
+ }
- assertTrue(FileUtils.fileExists(resorucesDir + "/file4.txt"));
- assertTrue(FileUtils.fileExists(resorucesDir + "/package/file3.nottest"));
- assertTrue(FileUtils.fileExists(resorucesDir + "/notpackage/file1.include"));
- assertTrue(FileUtils.fileExists(resorucesDir + "/package/test"));
- assertTrue(FileUtils.fileExists(resorucesDir + "/notpackage/test"));
+ private List getResources(MavenProjectResourcesStub project) {
+ return project.getBuild().getResources().stream()
+ .map(ResourceUtils::newResource)
+ .collect(Collectors.toList());
}
}
diff --git a/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectBasicStub.java b/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectBasicStub.java
index adb6d88..ef55ba2 100644
--- a/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectBasicStub.java
+++ b/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectBasicStub.java
@@ -18,14 +18,16 @@
*/
package org.apache.maven.plugins.resources.stub;
-import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.Properties;
-import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
-import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.util.FileUtils;
+import org.apache.maven.api.plugin.testing.MojoExtension;
+import org.apache.maven.api.plugin.testing.stubs.ProjectStub;
-public class MavenProjectBasicStub extends MavenProjectStub {
+public class MavenProjectBasicStub extends ProjectStub {
protected String identifier;
protected String testRootDir;
@@ -34,59 +36,22 @@ public class MavenProjectBasicStub extends MavenProjectStub {
protected String description;
- public MavenProjectBasicStub(String id) {
+ public MavenProjectBasicStub(String id) throws IOException {
properties = new Properties();
identifier = id;
- testRootDir = PlexusTestCase.getBasedir() + "/target/unit/test-dir/" + identifier;
+ testRootDir = MojoExtension.getBasedir() + "/target/test-classes/unit/test-dir/" + identifier;
+ setBasedir(Paths.get(testRootDir));
- if (!FileUtils.fileExists(testRootDir)) {
- FileUtils.mkdir(testRootDir);
+ Path path = Paths.get(testRootDir);
+ if (!Files.exists(path)) {
+ Files.createDirectories(path);
}
- }
-
- public String getName() {
- return "Test Project " + identifier;
- }
-
- public void setDescription(String desc) {
- description = desc;
- }
-
- public String getDescription() {
- if (description == null) {
- return "this is a test project";
- } else {
- return description;
- }
- }
-
- public File getBasedir() {
- // create an isolated environment
- // see setupTestEnvironment for details
- return new File(testRootDir);
- }
-
- public String getGroupId() {
- return "org.apache.maven.plugin.test";
- }
-
- public String getArtifactId() {
- return "maven-resource-plugin-test#" + identifier;
- }
-
- public String getPackaging() {
- return "org.apache.maven.plugin.test";
- }
-
- public String getVersion() {
- return identifier;
- }
-
- public void addProperty(String key, String value) {
- properties.put(key, value);
- }
- public Properties getProperties() {
- return properties;
+ setName("Test Project " + identifier);
+ setGroupId("org.apache.maven.plugin.test");
+ setArtifactId("maven-resource-plugin-test#" + identifier);
+ setVersion(identifier);
+ setPackaging("org.apache.maven.plugin.test");
+ setDescription("this is a test project");
}
}
diff --git a/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectBuildStub.java b/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectBuildStub.java
index 490fcc9..c1ea7f2 100644
--- a/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectBuildStub.java
+++ b/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectBuildStub.java
@@ -18,18 +18,35 @@
*/
package org.apache.maven.plugins.resources.stub;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;
-import org.apache.maven.model.Build;
import org.codehaus.plexus.util.FileUtils;
public class MavenProjectBuildStub extends MavenProjectBasicStub {
- protected Build build;
-
protected String srcDirectory;
protected String targetDirectory;
@@ -57,7 +74,6 @@ public class MavenProjectBuildStub extends MavenProjectBasicStub {
public MavenProjectBuildStub(String key) throws Exception {
super(key);
- build = new Build();
fileList = new ArrayList<>();
directoryList = new ArrayList<>();
dataMap = new HashMap<>();
@@ -72,7 +88,7 @@ public void addDirectory(String name) {
public void setOutputDirectory(String dir) {
outputDirectory = buildDirectory + "/" + dir;
- build.setOutputDirectory(outputDirectory);
+ setModel(getModel().withBuild(getModel().getBuild().withOutputDirectory(outputDirectory)));
}
public void addFile(String name) {
@@ -104,10 +120,6 @@ public String getTestResourcesDirectory() {
return testResourcesDirectory;
}
- public Build getBuild() {
- return build;
- }
-
/**
* returns true if the path is relative
* and false if absolute
@@ -138,9 +150,12 @@ private void setupBuild() {
resourcesDirectory = srcDirectory + "/main/resources/";
testResourcesDirectory = srcDirectory + "/test/resources/";
- build.setDirectory(buildDirectory);
- build.setOutputDirectory(outputDirectory);
- build.setTestOutputDirectory(testOutputDirectory);
+ setModel(getModel()
+ .withBuild(org.apache.maven.api.model.Build.newBuilder()
+ .directory(buildDirectory)
+ .outputDirectory(outputDirectory)
+ .testOutputDirectory(testOutputDirectory)
+ .build()));
}
public void cleanBuildEnvironment() throws Exception {
@@ -186,67 +201,30 @@ public void setupBuildEnvironment() throws Exception {
}
}
- private void createDirectories(String parent, String testparent) {
- File currentDirectory;
-
+ private void createDirectories(String parent, String testparent) throws IOException {
for (String directory : directoryList) {
- currentDirectory = new File(parent, "/" + directory);
-
- if (!currentDirectory.exists()) {
- currentDirectory.mkdirs();
- }
-
- // duplicate dir structure in test resources
- currentDirectory = new File(testparent, "/" + directory);
-
- if (!currentDirectory.exists()) {
- currentDirectory.mkdirs();
- }
+ Files.createDirectories(new File(parent, "/" + directory).toPath());
+ Files.createDirectories(new File(testparent, "/" + directory).toPath());
}
}
private void createFiles(String parent, String testparent) throws IOException {
- File currentFile;
-
for (String file : fileList) {
- currentFile = new File(parent, file);
-
- // create the necessary parent directories
- // before we create the files
- if (!currentFile.getParentFile().exists()) {
- currentFile.getParentFile().mkdirs();
- }
-
- if (!currentFile.exists()) {
- try {
- currentFile.createNewFile();
- populateFile(currentFile);
- } catch (IOException io) {
- // TODO: handle exception
- }
- }
-
- // duplicate file in test resources
- currentFile = new File(testparent, file);
-
- if (!currentFile.getParentFile().exists()) {
- currentFile.getParentFile().mkdirs();
- }
-
- if (!currentFile.exists()) {
- currentFile.createNewFile();
- populateFile(currentFile);
- }
+ populateFile(new File(parent, file));
+ populateFile(new File(testparent, file));
}
}
private void populateFile(File file) throws IOException {
+ Files.createDirectories(file.getParentFile().toPath());
String data = dataMap.get(file.getName());
-
- if ((data != null) && file.exists()) {
- try (FileOutputStream outputStream = new FileOutputStream(file)) {
+ try (FileOutputStream outputStream = new FileOutputStream(file)) {
+ if (data != null) {
outputStream.write(data.getBytes());
}
}
+ if (!file.exists()) {
+ throw new IOException("Unable to create file: " + file);
+ }
}
}
diff --git a/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectResourcesStub.java b/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectResourcesStub.java
index e0c5420..78729bb 100644
--- a/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectResourcesStub.java
+++ b/src/test/java/org/apache/maven/plugins/resources/stub/MavenProjectResourcesStub.java
@@ -18,89 +18,142 @@
*/
package org.apache.maven.plugins.resources.stub;
-import java.io.File;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
-import org.apache.maven.model.Resource;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
+import java.util.function.Function;
-public class MavenProjectResourcesStub extends MavenProjectBuildStub {
+import org.apache.maven.api.model.Build;
+import org.apache.maven.api.model.Resource;
+import org.apache.maven.api.plugin.testing.MojoExtension;
+import org.codehaus.plexus.util.FileUtils;
- private File baseDir;
+public class MavenProjectResourcesStub extends MavenProjectBuildStub {
- public MavenProjectResourcesStub(String id) throws Exception {
- super(id);
+ public MavenProjectResourcesStub() throws Exception {
+ super(MojoExtension.getTestId());
setupResources();
setupTestResources();
+ Path outputDirectory = Paths.get(getOutputDirectory());
+ FileUtils.deleteDirectory(outputDirectory.toFile());
+ Files.createDirectories(outputDirectory);
}
public void addInclude(String pattern) {
- build.getResources().get(0).addInclude(pattern);
+ withResource(r -> r.withIncludes(concat(r.getIncludes(), pattern)));
}
public void addExclude(String pattern) {
- build.getResources().get(0).addExclude(pattern);
+ withResource(r -> r.withExcludes(concat(r.getExcludes(), pattern)));
}
public void addTestInclude(String pattern) {
- build.getTestResources().get(0).addInclude(pattern);
+ withTestResource(r -> r.withIncludes(concat(r.getIncludes(), pattern)));
}
public void addTestExclude(String pattern) {
- build.getTestResources().get(0).addExclude(pattern);
+ withTestResource(r -> r.withExcludes(concat(r.getExcludes(), pattern)));
}
public void setTargetPath(String path) {
- build.getResources().get(0).setTargetPath(path);
+ withResource(r -> r.withTargetPath(path));
}
public void setTestTargetPath(String path) {
- build.getTestResources().get(0).setTargetPath(path);
+ withTestResource(r -> r.withTargetPath(path));
}
public void setDirectory(String dir) {
- build.getResources().get(0).setDirectory(dir);
+ withResource(r -> r.withDirectory(dir));
}
public void setTestDirectory(String dir) {
- build.getTestResources().get(0).setDirectory(dir);
+ withTestResource(r -> r.withDirectory(dir));
}
- public void setResourceFiltering(int nIndex, boolean filter) {
- if (build.getResources().size() > nIndex) {
- build.getResources().get(nIndex).setFiltering(filter);
- }
+ public void setResourceFiltering(boolean filter) {
+ withResource(r -> r.withFiltering(Boolean.toString(filter)));
}
- private void setupResources() {
- Resource resource = new Resource();
+ private List concat(Collection collection, T item) {
+ List list = new ArrayList<>(collection);
+ list.add(item);
+ return list;
+ }
+
+ private void withResource(
+ Function mapper) {
+ Build build = getModel().getBuild();
+ setModel(getModel()
+ .withBuild(build.withResources(Collections.singletonList(
+ mapper.apply(build.getResources().get(0))))));
+ }
+ private void withTestResource(
+ Function mapper) {
+ Build build = getModel().getBuild();
+ setModel(getModel()
+ .withBuild(build.withTestResources(Collections.singletonList(
+ mapper.apply(build.getTestResources().get(0))))));
+ }
+
+ private void setupResources() {
// see MavenProjectBasicStub for details
// of getBasedir
// setup default resources
- resource.setDirectory(getBasedir().getPath() + "/src/main/resources");
- resource.setFiltering(false);
- resource.setTargetPath(null);
- build.addResource(resource);
+ Resource resource = Resource.newBuilder()
+ .directory(testRootDir + "/src/main/resources")
+ .filtering(Boolean.toString(false))
+ .targetPath(null)
+ .build();
+ setModel(getModel()
+ .withBuild(getModel()
+ .getBuild()
+ .withResources(concat(getModel().getBuild().getResources(), resource))));
}
private void setupTestResources() {
- Resource resource = new Resource();
-
// see MavenProjectBasicStub for details
// of getBasedir
// setup default test resources
- resource.setDirectory(getBasedir().getPath() + "/src/test/resources");
- resource.setFiltering(false);
- resource.setTargetPath(null);
- build.addTestResource(resource);
+ Resource resource = Resource.newBuilder()
+ .directory(testRootDir + "/src/test/resources")
+ .filtering(Boolean.toString(false))
+ .targetPath(null)
+ .build();
+ setModel(getModel()
+ .withBuild(getModel()
+ .getBuild()
+ .withTestResources(concat(getModel().getBuild().getTestResources(), resource))));
}
- public File getBaseDir() {
- return baseDir == null ? super.getBasedir() : baseDir;
+ public String getOutputDirectory() {
+ return getBuild().getOutputDirectory();
}
- public void setBaseDir(File baseDir) {
- this.baseDir = baseDir;
+ public String getTestOutputDirectory() {
+ return getBuild().getTestOutputDirectory();
}
}
diff --git a/src/test/resources/unit/resources-test/plugin-config.xml b/src/test/resources/unit/resources-test/plugin-config.xml
index 3f1dc4c..43d2bd7 100644
--- a/src/test/resources/unit/resources-test/plugin-config.xml
+++ b/src/test/resources/unit/resources-test/plugin-config.xml
@@ -25,7 +25,10 @@
maven-resources-plugin
- /test-classes/unit/resources-test
+
+
+
+
UTF-8
@@ -35,12 +38,12 @@
false
/test/resources/unit/test-dir
- **/*.include
- **/*.test
+ **/*.include
+ **/*.test
- **/**.exclude
- **/*.nottest
+ **/**.exclude
+ **/*.nottest