org.spiffyui.maven.plugins.JavaCompileMojo Maven / Gradle / Ivy
/*******************************************************************************
*
* Copyright 2011 Spiffy UI Team
*
* Licensed 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.spiffyui.maven.plugins;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import org.apache.commons.io.FileUtils;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
/**
* Invokes the Java compiler for the project .java source
*
* @goal java-compile
* @phase process-classes
* @requiresDependencyResolution compile
*/
public class JavaCompileMojo extends AbstractMojo
{
/**
* @parameter default-value="${project}"
* @required
* @readonly
*/
private MavenProject project;
/**
* Enable debug output
*
* @parameter expression="${spiffyui.javac.debug}" default-value=true
*/
private boolean debug;
/**
* Enable verbose output
*
* @parameter expression="${spiffyui.javac.verbose}" default-value=false
*/
private boolean verbose;
/**
* Enable deprecation warnings
*
* @parameter expression="${spiffyui.javac.deprecation}" default-value=false
*/
private boolean deprecation;
/**
* Disable warnings
*
* @parameter expression="${spiffyui.javac.nowarn}" default-value=false
*/
private boolean nowarn;
/**
* Set Xlint value passed to compiler "all" = enable all "none" = disable
* all $value = pass to compiler as -Xlint:$value
*
* @parameter expression="${spiffyui.javac.xlint}" default-value=none
*/
private String xlint;
/**
* Extra arguments to pass to the compiler
*
* @parameter expression="${spiffyui.javac.extraArgs}"
*/
private List extraArgs;
/**
* The -source argument for the Java compiler.
*
* @parameter expression="${spiffyui.javac.source}" default-value="1.6"
*/
private String source;
/**
* The -target argument for the Java compiler.
*
* @parameter expression="${spiffyui.javac.target}" default-value="1.6"
*/
private String target;
/**
* The source directories containing the sources to be compiled.
*
* @parameter default-value="${project.compileSourceRoots}"
* @required
* @readonly
*/
private List compileSourceRoots;
/**
* The path to our generated source
*
* @parameter expression="${spiffyui.generated-source}"
* @required
* @readonly
*/
private String generatedSourcePath;
/**
* Project classpath.
*
* @parameter default-value="${project.compileClasspathElements}"
* @required
* @readonly
*/
private List classpathElements;
/**
* The character encoding scheme to be applied when filtering resources.
*
* @parameter expression="${project.build.sourceEncoding}"
* default-value="UTF-8"
*/
private String encoding;
/**
* The output directory into which to copy the resources.
*
* @parameter default-value="${project.build.outputDirectory}"
* @required
*/
private File outputDirectory;
/**
*
* Specify where to place generated source files created by annotation
* processing. Only applies to JDK 1.6+
*
*
* @parameter
* default-value="${project.build.directory}/generated-sources/annotations"
*/
private File generatedSourcesDirectory;
/**
* Convenience class that makes it easier to build a string of arguments for
* passing to the compiler
*/
class ArgBuilder
{
private List m_args = new ArrayList();
ArgBuilder add(String arg)
{
m_args.add(arg);
return this;
}
@Override
public String toString()
{
return flatten(m_args.toString(), " ");
}
public String[] get()
{
return m_args.toArray(new String[m_args.size()]);
}
}
@Override
public void execute()
throws MojoExecutionException,
MojoFailureException
{
ArgBuilder args = new ArgBuilder();
String classpath = flatten(classpathElements.toString(), File.pathSeparator);
if (debug) {
args.add("-g");
}
if (verbose) {
args.add("-verbose");
}
if (deprecation) {
args.add("-deprecation");
}
if (nowarn) {
args.add("-nowarn");
}
if (!xlint.equals("none")) {
if (xlint.equals("all")) {
args.add("-Xlint");
} else {
args.add("-Xlint:" + xlint);
}
}
args.add("-d").add(outputDirectory.getAbsolutePath()).add("-s").add(generatedSourcesDirectory.getAbsolutePath()).add("-encoding")
.add(encoding).add("-cp").add(classpath).add("-source").add(source).add("-target").add(target);
String[] exts = {
"java"
};
for (String extraArg : extraArgs) {
args.add(extraArg);
}
List sources = compileSourceRoots;
sources.add(generatedSourcePath);
for (String s : sources) {
File path = new File(s);
if (!path.exists()) {
continue;
}
List files = new ArrayList(FileUtils.listFiles(path, exts, true));
for (File file : files) {
args.add(file.getAbsolutePath());
}
}
ensureExists(outputDirectory);
ensureExists(generatedSourcesDirectory);
JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
if (javac == null) {
throw new MojoExecutionException("The Java compiler could not be found. " +
"Make sure to point your Maven build to a full Java development environment.");
}
getLog().debug("Exec: javac " + args.toString());
if (javac.run(null, null, null, args.get()) != 0) {
throw new MojoExecutionException("Compilation failed");
}
}
private void ensureExists(File dir)
{
if (!dir.exists()) {
dir.mkdirs();
}
}
private String flatten(String list, String sep)
{
return list.replace(", ", sep).replace("[", "").replace("]", "");
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy