Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gen feat build file fix #706

Merged
merged 8 commits into from
Feb 14, 2022
32 changes: 22 additions & 10 deletions src/main/groovy/io/openliberty/tools/gradle/tasks/DevTask.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,7 @@ class DevTask extends AbstractFeatureTask {
public boolean recompileBuildFile(File buildFile, Set<String> compileArtifactPaths, Set<String> testArtifactPaths, ThreadPoolExecutor executor) {
boolean restartServer = false;
boolean installFeatures = false;
boolean compileDependenciesChanged = false;

ProjectBuilder builder = ProjectBuilder.builder();
Project newProject;
Expand Down Expand Up @@ -542,6 +543,21 @@ class DevTask extends AbstractFeatureTask {
project.liberty.server.features.name = newFeatureNames;
}

// check if compile dependencies have changed
Configuration existingProjectCompileConfiguration = project.configurations.getByName('providedCompile');
List<String> existingProjectCompileDependencies = new ArrayList<String>();
existingProjectCompileConfiguration.dependencies.each { dep -> existingProjectCompileDependencies.add(dep.group + ":" + dep.name + ":" + dep.version) }

Configuration newProjectCompileConfiguration = newProject.configurations.getByName('providedCompile');
List<String> newProjectCompileDependencies = new ArrayList<String>();
newProjectCompileConfiguration.dependencies.each { dep -> newProjectCompileDependencies.add(dep.group + ":" + dep.name + ":" + dep.version) }

newProjectCompileDependencies.removeAll(existingProjectCompileDependencies);
if (!newProjectCompileDependencies.isEmpty()) {
logger.debug("Compile dependencies changed");
compileDependenciesChanged = true;
}

Configuration newLibertyFeatureConfiguration = newProject.configurations.getByName('libertyFeature');
List<String> newLibertyFeatureDependencies = new ArrayList<String>();
newLibertyFeatureConfiguration.dependencies.each { dep -> newLibertyFeatureDependencies.add(dep.name) }
Expand All @@ -564,19 +580,15 @@ class DevTask extends AbstractFeatureTask {
// - start server
util.restartServer();
return true;
} else if (compileDependenciesChanged && generateFeatures) { // generate features if compile dependencies have been modified
// optimize generate features on build dependency change
boolean generateFeaturesSuccess = libertyGenerateFeatures(null, true);
if (generateFeaturesSuccess) {
util.javaSourceClassPaths.clear();
};
} else if (installFeatures) {
if (generateFeatures) {
// Increment generate features on build dependency change
ProjectConnection gradleConnection = initGradleProjectConnection();
BuildLauncher gradleBuildLauncher = gradleConnection.newBuild();
runGradleTask(gradleBuildLauncher, 'compileJava', 'processResources'); // ensure class files exist
Collection<String> javaSourceClassPaths = getJavaSourceClassPaths();
libertyGenerateFeatures(javaSourceClassPaths, false);
libertyCreate(); // need to run create in order to copy generated config file to target
}
libertyInstallFeature();
}

return true;
}

Expand Down
50 changes: 44 additions & 6 deletions src/test/groovy/io/openliberty/tools/gradle/DevTest.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,25 @@ class DevTest extends AbstractIntegrationTest {
}
return false;
}

protected static boolean verifyLogMessage(int timeout, String message, int occurrences)
throws InterruptedException, FileNotFoundException {
verifyLogMessage(timeout, message, logFile, occurrences)
}

protected static boolean verifyLogMessage(int timeout, String message, File file, int occurrences)
throws InterruptedException, FileNotFoundException {
int waited = 0;
int sleep = 10;
while (waited <= timeout) {
Thread.sleep(sleep);
waited += sleep;
if (countOccurrences(message, file) == occurrences) {
return true;
}
}
return false;
}

protected static boolean verifyFileExists(File file, int timeout)
throws InterruptedException {
int waited = 0;
Expand Down Expand Up @@ -343,18 +361,38 @@ class DevTest extends AbstractIntegrationTest {
private static void stopProcess(boolean isDevMode) throws IOException, InterruptedException, FileNotFoundException {
// shut down dev mode
if (writer != null) {
if(isDevMode) {
int serverStoppedOccurrences = countOccurrences("CWWKE0036I", logFile);
if (isDevMode) {
writer.write("exit"); // trigger dev mode to shut down
}
else {
} else {
process.destroy(); // stop run
}
writer.flush();
writer.close();

// test that dev mode has stopped running
assertTrue(verifyLogMessage(100000, "CWWKE0036I"));
assertTrue(verifyLogMessage(100000, "CWWKE0036I", ++serverStoppedOccurrences));
}
}


/**
* Count number of lines that contain the given string
*/
protected static int countOccurrences(String str, File file) throws FileNotFoundException, IOException {
int occurrences = 0;
BufferedReader br = new BufferedReader(new FileReader(file));
String line = br.readLine();
try {
while (line != null) {
if (line.contains(str)) {
occurrences++;
}
line = br.readLine();
}
} finally {
br.close();
}
return occurrences;
}

}