Skip to content

Commit c07c8fd

Browse files
Improve discovering javaSource based on maven.compiler properties, default as 8
We can recognize based on properties: - maven.compiler.release - maven.compiler.source - maven.compiler.target fix #194
1 parent 478d5e0 commit c07c8fd

File tree

5 files changed

+125
-3
lines changed

5 files changed

+125
-3
lines changed

modello-core/src/main/java/org/codehaus/modello/ModelloParameterConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ public class ModelloParameterConstants {
5151
*/
5252
public static final String OUTPUT_JAVA_SOURCE = "modello.output.java.source";
5353

54+
public static final String OUTPUT_JAVA_SOURCE_DEFAULT = "8";
55+
5456
public static final String OUTPUT_XDOC_FILE_NAME = "modello.output.xdoc.file";
5557

5658
public static final String OUTPUT_XSD_FILE_NAME = "modello.output.xsd.file";

modello-maven-plugin/src/main/java/org/codehaus/modello/maven/AbstractModelloSourceGeneratorMojo.java

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323
*/
2424

2525
import java.io.File;
26+
import java.util.Optional;
2627
import java.util.Properties;
28+
import java.util.function.Supplier;
29+
import java.util.stream.Stream;
2730

2831
import org.apache.maven.plugins.annotations.Parameter;
2932
import org.codehaus.modello.ModelloParameterConstants;
@@ -47,10 +50,20 @@ public abstract class AbstractModelloSourceGeneratorMojo extends AbstractModello
4750
private String encoding;
4851

4952
/**
50-
* Generate Java 5 sources, with generic collections.
53+
* The java source level used for generating outputs classes.
54+
* <p/>
55+
* Will be discovered from project properties, in order:
56+
* <ul>
57+
* <li><code>maven.compiler.release</code></li>
58+
* <li><code>maven.compiler.source</code></li>
59+
* <li><code>maven.compiler.target</code></li>
60+
* </ul>
61+
*
62+
* If all of above properties was not be set, default value as <b>8</b> will be used.
63+
*
5164
* @since 1.0
5265
*/
53-
@Parameter(defaultValue = "${maven.compiler.source}")
66+
@Parameter
5467
private String javaSource;
5568

5669
/**
@@ -85,9 +98,33 @@ protected void customizeParameters(Properties parameters) {
8598
if (javaSource.startsWith("1.")) {
8699
javaSource = javaSource.substring("1.".length());
87100
}
88-
parameters.setProperty(ModelloParameterConstants.OUTPUT_JAVA_SOURCE, javaSource);
101+
} else {
102+
javaSource = discoverJavaSource();
89103
}
104+
getLog().debug("javaSource=" + javaSource);
105+
parameters.setProperty(ModelloParameterConstants.OUTPUT_JAVA_SOURCE, javaSource);
90106

91107
parameters.setProperty(ModelloParameterConstants.DOM_AS_XPP3, Boolean.toString(domAsXpp3));
92108
}
109+
110+
private String discoverJavaSource() {
111+
Properties projectProperties = getProject().getProperties();
112+
113+
Supplier<String> release = () -> projectProperties.getProperty("maven.compiler.release");
114+
Supplier<String> source = () -> projectProperties.getProperty("maven.compiler.source");
115+
Supplier<String> target = () -> projectProperties.getProperty("maven.compiler.target");
116+
117+
Optional<String> jSource = Stream.of(release, source, target)
118+
.map(Supplier::get)
119+
.filter(s -> s != null && !s.isEmpty())
120+
.findFirst();
121+
122+
if (jSource.isPresent()) {
123+
return jSource.get();
124+
} else {
125+
getLog().warn("javaSource was not discovered - use default value "
126+
+ ModelloParameterConstants.OUTPUT_JAVA_SOURCE_DEFAULT);
127+
return ModelloParameterConstants.OUTPUT_JAVA_SOURCE_DEFAULT;
128+
}
129+
}
93130
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package org.codehaus.modello.maven;
2+
3+
import java.util.Properties;
4+
5+
import org.apache.maven.model.Model;
6+
import org.apache.maven.project.MavenProject;
7+
import org.codehaus.modello.ModelloParameterConstants;
8+
import org.junit.Test;
9+
10+
import static org.junit.Assert.assertEquals;
11+
12+
public class AbstractModelloSourceGeneratorMojoTest {
13+
14+
private class ModelloSourceGeneratorMojoTest extends AbstractModelloSourceGeneratorMojo {
15+
16+
private final Properties projectProperties;
17+
18+
ModelloSourceGeneratorMojoTest(Properties projectProperties) {
19+
this.projectProperties = projectProperties;
20+
}
21+
22+
@Override
23+
protected String getGeneratorType() {
24+
return null;
25+
}
26+
27+
@Override
28+
public MavenProject getProject() {
29+
Model model = new Model();
30+
model.setProperties(projectProperties);
31+
MavenProject project = new MavenProject();
32+
project.setModel(model);
33+
return project;
34+
}
35+
}
36+
37+
private void executeJavaSourceTest(Properties projectProperties, String expexted) {
38+
ModelloSourceGeneratorMojoTest modelloSourceGeneratorMojoTest =
39+
new ModelloSourceGeneratorMojoTest(projectProperties);
40+
Properties properties = new Properties();
41+
42+
modelloSourceGeneratorMojoTest.customizeParameters(properties);
43+
44+
assertEquals(properties.getProperty(ModelloParameterConstants.OUTPUT_JAVA_SOURCE), expexted);
45+
}
46+
47+
@Test
48+
public void testJavaSourceDefault() {
49+
executeJavaSourceTest(new Properties(), ModelloParameterConstants.OUTPUT_JAVA_SOURCE_DEFAULT);
50+
}
51+
52+
@Test
53+
public void testJavaSourceFromRelease() {
54+
Properties projectProperties = new Properties();
55+
projectProperties.setProperty("maven.compiler.release", "11");
56+
projectProperties.setProperty("maven.compiler.source", "xxx");
57+
projectProperties.setProperty("maven.compiler.target", "xxx");
58+
59+
executeJavaSourceTest(projectProperties, "11");
60+
}
61+
62+
@Test
63+
public void testJavaSourceFromSource() {
64+
Properties projectProperties = new Properties();
65+
projectProperties.setProperty("maven.compiler.source", "11");
66+
projectProperties.setProperty("maven.compiler.target", "xxx");
67+
68+
executeJavaSourceTest(projectProperties, "11");
69+
}
70+
71+
@Test
72+
public void testJavaSourceFromTarget() {
73+
Properties projectProperties = new Properties();
74+
projectProperties.setProperty("maven.compiler.target", "11");
75+
76+
executeJavaSourceTest(projectProperties, "11");
77+
}
78+
}

modello-maven-plugin/src/test/java/org/codehaus/modello/maven/ModelloConvertersMojoTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.io.File;
2626
import java.util.Arrays;
2727

28+
import org.apache.maven.project.MavenProject;
2829
import org.codehaus.modello.core.ModelloCore;
2930
import org.codehaus.plexus.ContainerConfiguration;
3031
import org.codehaus.plexus.PlexusTestCase;
@@ -66,6 +67,8 @@ public void testModelloConvertersMojo() throws Exception {
6667

6768
mojo.setBuildContext(buildContext);
6869

70+
mojo.setProject(new MavenProject());
71+
6972
mojo.execute();
7073

7174
// ----------------------------------------------------------------------

modello-maven-plugin/src/test/java/org/codehaus/modello/maven/ModelloJavaMojoTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.io.File;
2626
import java.util.Arrays;
2727

28+
import org.apache.maven.project.MavenProject;
2829
import org.codehaus.modello.core.ModelloCore;
2930
import org.codehaus.plexus.ContainerConfiguration;
3031
import org.codehaus.plexus.PlexusTestCase;
@@ -65,6 +66,7 @@ public void testModelloJavaMojo() throws Exception {
6566
mojo.setModelloCore(modelloCore);
6667

6768
mojo.setBuildContext(buildContext);
69+
mojo.setProject(new MavenProject());
6870

6971
mojo.execute();
7072

0 commit comments

Comments
 (0)