Skip to content

Commit 3cb66f1

Browse files
authored
Deduplicate template staging and release from dependent modules (#2283)
1 parent 499bdba commit 3cb66f1

File tree

9 files changed

+39
-15
lines changed

9 files changed

+39
-15
lines changed

plugins/core-plugin/src/main/java/com/google/cloud/teleport/plugin/TemplateDefinitionsParser.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,58 @@
1818
import com.google.cloud.teleport.metadata.MultiTemplate;
1919
import com.google.cloud.teleport.metadata.Template;
2020
import com.google.cloud.teleport.plugin.model.TemplateDefinitions;
21+
import java.io.File;
22+
import java.net.URI;
23+
import java.net.URISyntaxException;
2124
import java.util.ArrayList;
2225
import java.util.List;
2326
import java.util.Set;
2427
import org.reflections.Reflections;
28+
import org.slf4j.Logger;
29+
import org.slf4j.LoggerFactory;
2530

2631
/**
2732
* Utility class that will be used to scan for {@link Template} or {@link MultiTemplate} classes in
2833
* the classpath.
2934
*/
3035
public final class TemplateDefinitionsParser {
36+
private static final Logger LOG = LoggerFactory.getLogger(TemplateDefinitionsParser.class);
3137

3238
private TemplateDefinitionsParser() {}
3339

3440
/**
3541
* Given a ClassLoader, this method will scan look for every class that is annotated with {@link
36-
* Template} or {@link MultiTemplate}, by using {@link Reflections}. It then wraps all the
37-
* annotations and class name in a {@link TemplateDefinitions} instance, puts them in a list and
38-
* returns to the caller.
42+
* Template} or {@link MultiTemplate} from {@code outputDir}, by using {@link Reflections}. It
43+
* then wraps all the annotations and class name in a {@link TemplateDefinitions} instance, puts
44+
* them in a list and returns to the caller.
3945
*
4046
* @param classLoader ClassLoader that should be used to scan for the annotations.
47+
* @param outputDir dir of target class.
4148
* @return Listed with all definitions that could be found in the classpath.
4249
*/
43-
public static List<TemplateDefinitions> scanDefinitions(ClassLoader classLoader) {
44-
50+
public static List<TemplateDefinitions> scanDefinitions(ClassLoader classLoader, File outputDir) {
4551
List<TemplateDefinitions> allDefinitions = new ArrayList<>();
4652

4753
// Scan every @Template class
4854
Set<Class<?>> templates = new Reflections(classLoader).getTypesAnnotatedWith(Template.class);
4955
for (Class<?> templateClass : templates) {
5056
Template templateAnnotation = templateClass.getAnnotation(Template.class);
51-
if (!templateAnnotation.testOnly()) {
52-
allDefinitions.add(new TemplateDefinitions(templateClass, templateAnnotation));
57+
if (templateAnnotation.testOnly()) {
58+
continue;
59+
}
60+
61+
URI loc;
62+
try {
63+
loc = templateClass.getProtectionDomain().getCodeSource().getLocation().toURI();
64+
} catch (URISyntaxException e) {
65+
throw new RuntimeException(e);
5366
}
67+
if (!loc.getPath().startsWith(outputDir.getPath())) {
68+
LOG.info("Skip " + templateClass.getName() + " from dependency module " + loc);
69+
continue;
70+
}
71+
72+
allDefinitions.add(new TemplateDefinitions(templateClass, templateAnnotation));
5473
}
5574

5675
// Scan every @MultiTemplate class

plugins/core-plugin/src/main/java/com/google/cloud/teleport/plugin/TemplateSpecsGenerator.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,11 @@ public class TemplateSpecsGenerator {
4343
* Scan the classloader for all Template classes, and then builds spec + saves the metadata for
4444
* every Template.
4545
*/
46-
public void generateSpecs(ClassLoader classLoader, File baseDirectory, File targetDirectory) {
46+
public void generateSpecs(
47+
ClassLoader classLoader, File outputDirectory, File baseDirectory, File targetDirectory) {
4748

4849
List<TemplateDefinitions> templateDefinitions =
49-
TemplateDefinitionsParser.scanDefinitions(classLoader);
50+
TemplateDefinitionsParser.scanDefinitions(classLoader, outputDirectory);
5051
for (TemplateDefinitions definition : templateDefinitions) {
5152
LOG.info("Generating template " + definition.getTemplateAnnotation().name() + "...");
5253
// Skip generating docs for template annotations that are stage-only

plugins/templates-maven-plugin/src/main/java/com/google/cloud/teleport/plugin/maven/TemplatesBaseMojo.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,17 @@ protected URLClassLoader buildClassloader()
6464
List<String> classpathElements = project.getCompileClasspathElements();
6565

6666
List<URL> projectClasspathList = new ArrayList<>();
67+
// put thin jar (if exists) in front of classPath for class loader to override fat jar.
68+
// This is later used for filtering out templates from dependency modules when staging
69+
// templates of a module
6770
projectClasspathList.add(
6871
new File(
6972
outputDirectory,
7073
"original-" + project.getArtifactId() + "-" + project.getVersion() + ".jar")
7174
.toURI()
7275
.toURL());
7376

77+
// add remaining classes in compileClasspath
7478
for (String element : classpathElements) {
7579
try {
7680
projectClasspathList.add(new File(element).toURI().toURL());

plugins/templates-maven-plugin/src/main/java/com/google/cloud/teleport/plugin/maven/TemplatesReleaseMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public void execute() throws MojoExecutionException {
156156
LOG.info("Releasing Templates to bucket '{}'...", bucketNameOnly(bucketName));
157157

158158
List<TemplateDefinitions> templateDefinitions =
159-
TemplateDefinitionsParser.scanDefinitions(loader);
159+
TemplateDefinitionsParser.scanDefinitions(loader, outputDirectory);
160160

161161
if (templateName != null && !templateName.isEmpty()) {
162162
templateDefinitions =

plugins/templates-maven-plugin/src/main/java/com/google/cloud/teleport/plugin/maven/TemplatesRunMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ public void execute() throws MojoExecutionException {
168168
LOG.info("Staging Templates to bucket '{}'...", bucketNameOnly(bucketName));
169169

170170
List<TemplateDefinitions> templateDefinitions =
171-
TemplateDefinitionsParser.scanDefinitions(loader);
171+
TemplateDefinitionsParser.scanDefinitions(loader, outputDirectory);
172172

173173
Optional<TemplateDefinitions> definitionsOptional =
174174
templateDefinitions.stream()

plugins/templates-maven-plugin/src/main/java/com/google/cloud/teleport/plugin/maven/TemplatesSpecMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void execute() throws MojoExecutionException {
5050
}
5151

5252
TemplateSpecsGenerator generator = new TemplateSpecsGenerator();
53-
generator.generateSpecs(loader, baseDirectory, targetDirectory);
53+
generator.generateSpecs(loader, outputDirectory, baseDirectory, targetDirectory);
5454

5555
} catch (DependencyResolutionRequiredException e) {
5656
throw new MojoExecutionException("Dependency resolution failed", e);

plugins/templates-maven-plugin/src/main/java/com/google/cloud/teleport/plugin/maven/TemplatesStageMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ public void execute() throws MojoExecutionException {
264264
LOG.info("Staging Templates to bucket '{}'...", bucketNameOnly(bucketName));
265265

266266
List<TemplateDefinitions> templateDefinitions =
267-
TemplateDefinitionsParser.scanDefinitions(loader);
267+
TemplateDefinitionsParser.scanDefinitions(loader, outputDirectory);
268268
for (TemplateDefinitions definition : templateDefinitions) {
269269

270270
ImageSpec imageSpec = definition.buildSpecModel(false);

plugins/templates-maven-plugin/src/main/java/com/google/cloud/teleport/plugin/maven/TemplatesTerraformMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ private List<TemplateDefinitions> loadDefinitions()
9292

9393
LOG.info("Generating Template Specs, saving at target: {}", targetDirectory);
9494

95-
return TemplateDefinitionsParser.scanDefinitions(loader);
95+
return TemplateDefinitionsParser.scanDefinitions(loader, outputDirectory);
9696
}
9797

9898
private File modulePath(TemplateDefinitions definition) {

plugins/templates-maven-plugin/src/main/java/com/google/cloud/teleport/plugin/maven/TemplatesValidateMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void execute() throws MojoExecutionException {
5050
LOG.info("Validating Templates...");
5151

5252
List<TemplateDefinitions> templateDefinitions =
53-
TemplateDefinitionsParser.scanDefinitions(loader);
53+
TemplateDefinitionsParser.scanDefinitions(loader, outputDirectory);
5454
for (TemplateDefinitions definition : templateDefinitions) {
5555
ImageSpec imageSpec = definition.buildSpecModel(true);
5656
imageSpec.validate();

0 commit comments

Comments
 (0)