Kapt, Maven: Fix running with the non-clean build (KT-20816)

Clean target directories for kapt stubs and generated source files.
Filter out the compile destination directory from the classpath.
This commit is contained in:
Yan Zhulanow
2017-11-01 14:17:14 +09:00
parent 381379fb62
commit e4f476c09f
2 changed files with 28 additions and 1 deletions
@@ -132,6 +132,10 @@ public class K2JVMCompileMojo extends KotlinCompileMojoBase<K2JVMCompilerArgumen
return paths;
}
protected List<String> getClasspath() {
return filterClassPath(project.getBasedir(), classpath);
}
@NotNull
protected String getSourceSetName() {
return AnnotationProcessingManager.COMPILE_SOURCE_SET_NAME;
@@ -150,7 +154,7 @@ public class K2JVMCompileMojo extends KotlinCompileMojoBase<K2JVMCompilerArgumen
getLog().warn("Parameters module and testModule are deprecated and ignored, they will be removed in further release.");
}
List<String> classpathList = filterClassPath(project.getBasedir(), classpath);
List<String> classpathList = getClasspath();
if (!classpathList.isEmpty()) {
String classPathString = join(classpathList, File.pathSeparator);
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.maven.K2JVMCompileMojo;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import static org.jetbrains.kotlin.maven.Util.joinArrays;
import static org.jetbrains.kotlin.maven.kapt.AnnotationProcessingManager.*;
@@ -129,6 +130,28 @@ public class KaptJVMCompilerMojo extends K2JVMCompileMojo {
return super.execCompiler(compiler, messageCollector, arguments, sourceRoots);
}
@Override
protected List<String> getSourceFilePaths() {
File generatedSourcesDirectory = getGeneratedSourcesDirectory(project, getSourceSetName());
return super.getSourceFilePaths()
.stream()
.filter(path -> !new File(path).equals(generatedSourcesDirectory))
.collect(Collectors.toList());
}
@Override
protected List<String> getClasspath() {
File compileTargetDirectory = new File(this.output);
// TODO it seems for me that the target directory should not be in the compile classpath
// We filter out it here, but it's definitely a work-around.
return super.getClasspath()
.stream()
.filter(path -> !new File(path).equals(compileTargetDirectory))
.collect(Collectors.toList());
}
protected void addKaptSourcesDirectory(@NotNull String path) {
project.addCompileSourceRoot(path);
}