Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
1e5ec85
Specify version 24.0.0.2 for binary scanner
turkeylurkey Apr 8, 2025
69a9bdc
Print an error message if Liberty or server directory is missing duri…
turkeylurkey May 8, 2025
d82cede
Do not add a comment to server.xml when generating features
turkeylurkey May 12, 2025
924ca0b
Merge pull request #1881 from turkeylurkey/issue-1880
turkeylurkey May 16, 2025
1d08ab3
Merge pull request #1876 from turkeylurkey/issue-1874a
turkeylurkey May 16, 2025
6ba4225
Generate features into the server directory and not the src
turkeylurkey Apr 9, 2025
560cdeb
Update the generated-features test
turkeylurkey Apr 10, 2025
83504c0
Update copyright
turkeylurkey Apr 10, 2025
8878a03
Rework: getServerFeatures using serverDirectory not configDir
turkeylurkey May 16, 2025
1c73583
Add generateToSrc option to GenerateFeaturesMojo
turkeylurkey May 14, 2025
edf00e2
Add a test for the generateToSrc option
turkeylurkey May 14, 2025
9591269
Update MultiModuleGenerateFeaturesTest for directory change
turkeylurkey May 15, 2025
ef244ce
Introduce the concept of the directory that is the subject of generat…
turkeylurkey May 20, 2025
98cb179
Add generationContextDir and use consistently to generate features
turkeylurkey May 21, 2025
e101410
Simplify file name of generated xml file
turkeylurkey May 21, 2025
b201d6e
generateToSrcTest adds basic feature generation checks
turkeylurkey May 22, 2025
1267a36
Fix copyright
turkeylurkey May 22, 2025
889ce92
Fix bug in GenerateFeaturesTest
turkeylurkey May 22, 2025
8f0023e
Display a message specifically for generate features when serverDir i…
turkeylurkey May 23, 2025
006feb4
Improve error message
turkeylurkey May 26, 2025
02faf7d
Merge pull request #1877 from turkeylurkey/issue-1875
turkeylurkey May 26, 2025
0de255f
Clarify comment
turkeylurkey May 26, 2025
98b2252
Merge pull request #1885 from turkeylurkey/issue-1884
turkeylurkey Jun 4, 2025
d91edae
Add internal option to support devmode in generate features mojo
turkeylurkey Jun 11, 2025
f5f3cf5
Add generateToSrc option to dev mode
turkeylurkey May 28, 2025
75dbf3e
Rewrite the error message for missing server directory
turkeylurkey Jul 2, 2025
f0af852
Add test for missing server directory for generate features
turkeylurkey Jul 10, 2025
134a99a
Merge pull request #1893 from turkeylurkey/issue-1892
turkeylurkey Nov 10, 2025
9ef2e68
Create server before generate features if required
turkeylurkey Jun 2, 2025
09e9454
Clarify dev mode startup mojos for generateToSrc
turkeylurkey Jun 3, 2025
173d2d6
Fix bug in regular path
turkeylurkey Jun 3, 2025
e51dc09
Use the internalDevMode option when calling generate-features
turkeylurkey Jun 16, 2025
b49ad47
Use the tmp dir when generating features and then copy to server dir
turkeylurkey Jun 16, 2025
89a6d1f
Fix comment
turkeylurkey Jun 16, 2025
d13c739
Clean up method copyTempFeatureFileToServer
turkeylurkey Jun 16, 2025
d9aed38
Fix comments
turkeylurkey Jun 17, 2025
2d9d7fd
Improve the debug logging
turkeylurkey Jun 18, 2025
c0be127
Add a comment to explain why generateToSrc is not needed
turkeylurkey Jun 23, 2025
ba9f9ed
Fix debug stmt to show file full path
turkeylurkey Jun 23, 2025
c5e6f2b
Update generate features tests
turkeylurkey Jun 24, 2025
493f743
Fix MultiModuleGenerateFeaturesTest and DevTest
turkeylurkey Jun 24, 2025
27f2483
Update tests to use gen. features file in server dir
turkeylurkey Jun 25, 2025
d52c823
Add .vscode to .gitignore
turkeylurkey Jul 2, 2025
dce7751
Update tests for generate features mojo
turkeylurkey Jul 8, 2025
5eaf000
Update name of method used to copy temp features file and add TODO to…
turkeylurkey Dec 16, 2025
0ceb21e
Add generationOutputDir field to clarify generation process
turkeylurkey Dec 16, 2025
7b8aa71
Add comments to explain basic tests
turkeylurkey Dec 16, 2025
aa12835
Update liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/…
turkeylurkey Dec 17, 2025
a5f5038
Update liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/…
turkeylurkey Dec 17, 2025
592771a
Update liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/…
turkeylurkey Dec 17, 2025
4f0e025
Update liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/…
turkeylurkey Dec 17, 2025
0fa8e97
Make the generateFeatures option enabled by default in devmode
turkeylurkey Jun 25, 2025
2164690
Merge pull request #1909 from turkeylurkey/issue-1908
turkeylurkey Dec 18, 2025
daceb15
Merge pull request #1902 from turkeylurkey/issue-1897a
turkeylurkey Dec 18, 2025
4c6eae7
Merge branch 'generate-features-update' into issue-1879
turkeylurkey Dec 18, 2025
2fda848
Merge pull request #1888 from turkeylurkey/issue-1879
turkeylurkey Dec 18, 2025
b4f14dd
Use new variable name
turkeylurkey Dec 18, 2025
55919a0
Merge pull request #1953 from turkeylurkey/issue-1952
turkeylurkey Dec 18, 2025
415ee3c
One more place useDevModeTempDir is needed
turkeylurkey Dec 19, 2025
2c6d870
Merge pull request #1954 from turkeylurkey/add-useDevModeTempDir
turkeylurkey Dec 19, 2025
0f7df65
Copy config and changed file to temp dir for feature generation
turkeylurkey Jan 21, 2026
4071e2b
Update liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/…
turkeylurkey Feb 2, 2026
c4e9526
Code review: update comment
turkeylurkey Feb 3, 2026
06233b0
Merge pull request #1962 from turkeylurkey/issue-1959
turkeylurkey Feb 3, 2026
915c4aa
Pass the generateToSrc option when generating features
turkeylurkey Jan 28, 2026
68fb786
Merge pull request #1964 from turkeylurkey/issue-1963
turkeylurkey Feb 5, 2026
5848578
Fix merge conflicts
turkeylurkey Feb 6, 2026
ff56727
Merge pull request #1965 from turkeylurkey/merge-main-0130
turkeylurkey Feb 6, 2026
4bf9e62
Update the pom to use the correct version of ci.common
turkeylurkey Feb 6, 2026
3ba2ec4
Switch to optimizeGenerateFeatures() and updateExistingFeatures to av…
turkeylurkey Feb 10, 2026
7b92bc3
Use optimizeGenerateFeatures() and call updateExistingFeatures() to a…
turkeylurkey Feb 11, 2026
be907d5
Add description why we copy generated features file only when not gen…
turkeylurkey Feb 19, 2026
197e925
Merge pull request #1969 from turkeylurkey/update-pom
turkeylurkey Feb 20, 2026
4ddcad7
Update a comment
turkeylurkey Feb 20, 2026
c7c09bb
Update a different comment
turkeylurkey Feb 20, 2026
51c5f0b
Move mojo deploy after copy of gen. features file to serverDir
turkeylurkey Feb 20, 2026
7f69fa0
Merge pull request #1970 from turkeylurkey/issue-1967
turkeylurkey Feb 20, 2026
bcff058
Move the check for server dir after the check for multimodules
turkeylurkey Mar 30, 2026
8d44408
Collect the base feature list file and pass it to the binary scanner
turkeylurkey Apr 2, 2026
cbaa343
Get the Liberty version
turkeylurkey Apr 6, 2026
e388784
Get the feature lists from open or closed liberty according to versio…
turkeylurkey Apr 6, 2026
769a052
Clean up comments
turkeylurkey Apr 7, 2026
893b294
Rework: clarify the name of open liberty Maven coordinates
turkeylurkey Apr 17, 2026
ddd2d73
Rework to clarify the names of concepts
turkeylurkey Apr 17, 2026
892bdc2
Update a comment
turkeylurkey Apr 17, 2026
2b1a784
Update liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/…
turkeylurkey Apr 17, 2026
373a77e
Merge pull request #1989 from turkeylurkey/issue-1981
turkeylurkey Apr 17, 2026
daaf571
Merge pull request #1982 from turkeylurkey/issue-1978
turkeylurkey Apr 17, 2026
45c4fe0
Collect version numbers from all JavaEE umbrella dependencies and ret…
turkeylurkey Apr 7, 2026
643dbbb
Rework: remove complicated exception mechanism, make two messages inf…
turkeylurkey Apr 17, 2026
be184c9
Update liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/…
turkeylurkey Apr 17, 2026
cd8c2ca
Use Maven knowledgable compare method for MP versions
turkeylurkey Apr 17, 2026
bb0a8f3
Merge remote-tracking branch 'fork/issue-1591' into issue-1591
turkeylurkey Apr 17, 2026
3ecc5a6
Fix up variable name
turkeylurkey Apr 17, 2026
c45ab32
Merge pull request #1990 from turkeylurkey/issue-1591
turkeylurkey Apr 20, 2026
35868e4
Get platforms from server.xml and use to get version number for jakar…
turkeylurkey Apr 8, 2026
732ca70
Add handling for javaee platform in generate-features
turkeylurkey Apr 8, 2026
41a5937
Merge pull request #1991 from turkeylurkey/issue-1986
turkeylurkey Apr 20, 2026
2b1e03f
Add isDevMode parameter to generate features mojo
turkeylurkey Apr 15, 2026
aebe818
Add isDevMode parameter and write generated features file to server d…
turkeylurkey Apr 15, 2026
930518d
Remove skipServerConfigSetup because it is no longer needed by Genera…
turkeylurkey Apr 15, 2026
548c883
Remove skipServerConfigSetup so serverDirectory will be available eve…
turkeylurkey Apr 15, 2026
b6bcc3e
Rework: simplify the code writing the generate-features file to the s…
turkeylurkey Apr 17, 2026
3b02a14
Rework: print full path name in error message when generate features …
turkeylurkey Apr 20, 2026
eeeef65
Update liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/…
turkeylurkey Apr 20, 2026
25422e4
Merge pull request #1999 from turkeylurkey/issue-1998
turkeylurkey Apr 20, 2026
a55dcf5
Use the binary scanner API with a Map
turkeylurkey Apr 20, 2026
d5f9be8
Updated user facing output (#2002)
TrevCraw Apr 21, 2026
4c4f711
Rework: remove outdated comment
turkeylurkey Apr 21, 2026
75fbeb3
Gather all platforms of each type and find max version number in gen.…
turkeylurkey Apr 20, 2026
f6e7cf5
Remove debug code
turkeylurkey Apr 21, 2026
e3323a2
Merge pull request #2003 from turkeylurkey/issue-2000
turkeylurkey Apr 21, 2026
aa5ab5c
Merge pull request #2004 from turkeylurkey/issue-2001
turkeylurkey Apr 21, 2026
22c58ea
Merge ci.common version number
turkeylurkey Apr 21, 2026
6574127
Merge pull request #2005 from turkeylurkey/merge-main-0421
turkeylurkey Apr 21, 2026
81162af
Update ci.common version in pom.xml
turkeylurkey Apr 21, 2026
66fc67b
When a versionless feature exception is detected then print a message
turkeylurkey Apr 23, 2026
5c3d07e
Code clean-up
turkeylurkey Apr 23, 2026
0af64f9
Correct message
turkeylurkey Apr 23, 2026
e82aeab
Remove the exception message from a warning message
turkeylurkey Apr 30, 2026
e06cd58
Clean up a warning message
turkeylurkey Apr 30, 2026
e60436b
Print a message if generating to server dir and there is a g-f.xml fi…
turkeylurkey Apr 30, 2026
71f0dcf
Pass the correct parent directory to installFeaturesToTempDir
turkeylurkey May 1, 2026
bfeed36
Rewrite how we download feature lists for Websphere liberty
turkeylurkey May 4, 2026
9e5f424
Pass the correct parent directory to installFeaturesToTempDir in upda…
turkeylurkey May 4, 2026
7ae01aa
Apply suggestions from code review
turkeylurkey May 8, 2026
f0deb20
Display exception message with descriptive label
turkeylurkey May 8, 2026
26be71f
Merge pull request #2011 from turkeylurkey/issue-1976
turkeylurkey May 8, 2026
a636237
Change the term cadre to batch
turkeylurkey May 8, 2026
aaf5e82
Merge pull request #2008 from turkeylurkey/issue-1998b
turkeylurkey May 8, 2026
cd98c93
Merge pull request #2017 from turkeylurkey/issue-2010
turkeylurkey May 8, 2026
2fac8cf
Update the versionless feature message for dev mode
turkeylurkey May 8, 2026
4bd8f62
Merge pull request #2007 from turkeylurkey/issue-1988
turkeylurkey May 11, 2026
8ae42c7
Rework: modify the messages when generated-features.xml file is detected
turkeylurkey May 11, 2026
47a41a8
Merge pull request #2009 from turkeylurkey/issue-1977
turkeylurkey May 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ target/
.classpath
.factorypath
.idea/
.vscode/
.DS_Store
*.versionsBackup
/.metadata/
*.jar
*.jar
2 changes: 1 addition & 1 deletion liberty-maven-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
<dependency>
<groupId>io.openliberty.tools</groupId>
<artifactId>ci.common</artifactId>
<version>1.8.41</version>
<version>1.8.42-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* (c) Copyright IBM Corporation 2019, 2023.
* (c) Copyright IBM Corporation 2019, 2025
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -72,7 +72,7 @@ public class BaseDevTest {
final static String RUNNING_GENERATE_FEATURES = "Running liberty:generate-features";
final static String REGENERATE_FEATURES = "Regenerated the following features:";
final static String GENERATE_FEATURES = "Generated the following features:";
final static String SERVER_XML_COMMENT = "Plugin has generated Liberty features"; // the explanation added to server.xml
// final static String SERVER_XML_COMMENT = "Plugin has generated Liberty features"; // the explanation added to server.xml
final static String NEW_FILE_INFO_MESSAGE = "This file was generated by the Liberty Maven Plugin and will be overwritten"; // the explanation added to the generated features file
final static String SERVER_CONFIG_SUCCESS = "CWWKZ0003I:";// CWWKZ0003I: The application xxx updated in y.yyy seconds.
final static String SERVER_UPDATE_COMPLETE = "CWWKF0008I:"; // Feature update completed in 0.649 seconds.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* (c) Copyright IBM Corporation 2022.
* (c) Copyright IBM Corporation 2022, 2025
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -30,13 +30,13 @@
public class DevGenerateFeaturesDependenciesTest extends BaseDevTest {

@BeforeClass
public static void setUpBeforeClass() throws Exception {
setUpBeforeClass(null, "../resources/basic-dev-project-umbrella-deps");
}
public static void setUpBeforeClass() throws Exception {
setUpBeforeClass(null, "../resources/basic-dev-project-umbrella-deps");
}

@AfterClass
public static void cleanUpAfterClass() throws Exception {
BaseDevTest.cleanUpAfterClass();
BaseDevTest.cleanUpAfterClass();
}

@Test
Expand All @@ -45,16 +45,17 @@ public void updateDependencyTest() throws Exception {
assertTrue(verifyLogMessageExists("Listening for transport dt_socket at address: 8077", 20000) || verifyLogMessageExists("The debug port 8077 is not available.",20000));
assertTrue(verifyLogMessageExists("Liberty is running in dev mode.", 10000));

File generatedFeaturesFile = getGeneratedFeaturesFile();
//File generatedFeaturesFile = getGeneratedFeaturesFile();
File targetGeneratedFeaturesFile = getTargetGeneratedFeaturesFile();
assertTrue(pom.exists());
assertTrue(generatedFeaturesFile.exists());
//assertTrue(generatedFeaturesFile.exists());
assertTrue(targetGeneratedFeaturesFile.exists());
long lastModified = generatedFeaturesFile.lastModified();
// long lastModified = generatedFeaturesFile.lastModified();
long lastModified = targetGeneratedFeaturesFile.lastModified();
waitLongEnough();

// verify mpHealth-2.2 is in generated features file
assertTrue(verifyLogMessageExists("mpHealth-2.2", 10000, generatedFeaturesFile));
assertTrue(verifyLogMessageExists("mpHealth-2.2", 10000, targetGeneratedFeaturesFile));
assertTrue(verifyLogMessageExists("mpHealth-2.2", 10000)); // should appear in the message "CWWKF0012I: The server installed the following features:"

int generateFeaturesCount = countOccurrences("Running liberty:generate-features", logFile);
Expand All @@ -77,16 +78,20 @@ public void updateDependencyTest() throws Exception {

// Dev mode should now run the generate features mojo
assertTrue(getLogTail(), verifyLogMessageExists("Generated the following features:", 15000, logFile, ++generateFeaturesCount)); // mojo ran
assertTrue(generatedFeaturesFile.exists());
assertTrue(getLogTail(), lastModified < generatedFeaturesFile.lastModified());
// assertTrue(generatedFeaturesFile.exists());
// assertTrue(getLogTail(), lastModified < generatedFeaturesFile.lastModified());
assertTrue(targetGeneratedFeaturesFile.exists());
assertTrue(getLogTail(), lastModified < targetGeneratedFeaturesFile.lastModified());
//assertTrue(targetGeneratedFeaturesFile.exists());

// verify that mpHealth-3.0 is now in the generated features file
assertTrue(getLogTail(), verifyLogMessageExists("mpHealth-3.1", 10000, generatedFeaturesFile));
// assertTrue(getLogTail(), verifyLogMessageExists("mpHealth-3.1", 10000, generatedFeaturesFile));
assertTrue(getLogTail(), verifyLogMessageExists("mpHealth-3.1", 10000, targetGeneratedFeaturesFile));
assertTrue(getLogTail(), verifyLogMessageExists("mpHealth-3.1", 10000)); // should appear in the message "CWWKF0012I: The server installed the following features:"

// verify that mpHealth-2.2 is no longer in the generated features file
assertFalse(getLogTail(), verifyLogMessageExists("mpHealth-2.2", 10000, generatedFeaturesFile));
// assertFalse(getLogTail(), verifyLogMessageExists("mpHealth-2.2", 10000, generatedFeaturesFile));
assertFalse(getLogTail(), verifyLogMessageExists("mpHealth-2.2", 10000, targetGeneratedFeaturesFile));
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* (c) Copyright IBM Corporation 2019, 2022.
* (c) Copyright IBM Corporation 2019, 2025
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -276,7 +276,7 @@ public void generateFeatureTest() throws Exception {
int runGenerateFeaturesCount = countOccurrences(RUNNING_GENERATE_FEATURES, logFile);
int installedFeaturesCount = countOccurrences(SERVER_INSTALLED_FEATURES, logFile);

File newFeatureFile = getGeneratedFeaturesFile();
// File newFeatureFile = getGeneratedFeaturesFile();
File newTargetFeatureFile = getTargetGeneratedFeaturesFile();
File serverXmlFile = new File(tempProj, "/src/main/liberty/config/server.xml");
assertTrue(serverXmlFile.exists());
Expand All @@ -293,11 +293,11 @@ public void generateFeatureTest() throws Exception {
verifyFileExists(helloBatchObj, 15000);
// ... and run the proper mojo.
assertTrue(verifyLogMessageExists(RUNNING_GENERATE_FEATURES, 10000, ++runGenerateFeaturesCount)); // mojo ran
assertTrue(verifyFileExists(newFeatureFile, 5000)); // mojo created file
// assertTrue(verifyFileExists(newFeatureFile, 5000)); // mojo created file
assertTrue(verifyFileExists(newTargetFeatureFile, 5000)); // dev mode copied file
assertTrue(verifyLogMessageExists("batch-1.0", 10000, newFeatureFile));
assertTrue(verifyLogMessageExists(NEW_FILE_INFO_MESSAGE, 10000, newFeatureFile));
assertTrue(verifyLogMessageExists(SERVER_XML_COMMENT, 10000, serverXmlFile));
assertTrue(verifyLogMessageExists("batch-1.0", 10000, newTargetFeatureFile));
assertTrue(verifyLogMessageExists(NEW_FILE_INFO_MESSAGE, 10000, newTargetFeatureFile));
// assertTrue(verifyLogMessageExists(SERVER_XML_COMMENT, 10000, serverXmlFile));
// "CWWKF0012I: The server installed the following features:" assume batch-1.0 is in there
// batch-1.0 pulls in other features that can take a long time to download.
assertTrue(verifyLogMessageExists(SERVER_INSTALLED_FEATURES, 123000, ++installedFeaturesCount));
Expand Down Expand Up @@ -345,7 +345,7 @@ public void generateFeatureTest() throws Exception {
writer.write("o\n"); // on optimize regenerate
writer.flush();
assertTrue(verifyLogMessageExists(GENERATE_FEATURES, 10000, logFile, ++generateFeaturesCount));
assertTrue(verifyLogMessageExists("batch-1.0", 10000, newFeatureFile, 0)); // exist 0 times
assertTrue(verifyLogMessageExists("batch-1.0", 10000, newTargetFeatureFile, 0)); // exist 0 times
// Check for server response to newly generated feature list.
assertTrue(verifyLogMessageExists(SERVER_UPDATE_COMPLETE, 10000, serverUpdateCount+1));
// Need to ensure server finished updating before the next test starts.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* (c) Copyright IBM Corporation 2022.
* (c) Copyright IBM Corporation 2022, 2025
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -55,7 +55,8 @@ public void updatePomsTest() throws Exception {
int earTestsCount = countOccurrences("guide-maven-multimodules-ear tests compilation was successful.", logFile);

// verify that generated-features.xml file exists
File newFeatureFile = getGeneratedFeaturesFile("ear");
// File newFeatureFile = getGeneratedFeaturesFile("ear");
File newFeatureFile = getTargetGeneratedFeaturesFile("ear");
assertTrue(getLogTail(), verifyFileExists(newFeatureFile, 1000));
long newFeatureFileLastModified = newFeatureFile.lastModified();
waitLongEnough();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* (c) Copyright IBM Corporation 2022.
* (c) Copyright IBM Corporation 2022, 2025
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -63,11 +63,14 @@ public class BaseGenerateFeaturesTest {
static File targetDir;
static String processOutput = "";
static File newFeatureFile;
static File newFeatureFileSrc;
static File pom;
static File serverXmlFile;

static final String GENERATED_FEATURES_FILE_NAME = "generated-features.xml";
static final String GENERATED_FEATURES_FILE_PATH = "/src/main/liberty/config/configDropins/overrides/" + GENERATED_FEATURES_FILE_NAME;
static final String GENERATED_FEATURES_FILE_PATH = "/target/liberty/wlp/usr/servers/defaultServer/configDropins/overrides/" + GENERATED_FEATURES_FILE_NAME;
static final String GENERATED_FEATURES_FILE_PATH_SRC = "/src/main/liberty/config/configDropins/overrides/" + GENERATED_FEATURES_FILE_NAME;
static final String SERVER_MISSING_MESSAGE = "The 'generate-features' goal requires an existing Liberty server";

protected static void setUpBeforeTest(String projectRoot) throws IOException, InterruptedException {
basicProj = new File(projectRoot);
Expand All @@ -81,6 +84,7 @@ protected static void setUpBeforeTest(String projectRoot) throws IOException, In
assertTrue(logFile.createNewFile());

newFeatureFile = new File(tempProj, GENERATED_FEATURES_FILE_PATH);
newFeatureFileSrc = new File(tempProj, GENERATED_FEATURES_FILE_PATH_SRC);
pom = new File(tempProj, "pom.xml");
assertTrue(pom.exists());
replaceVersion(tempProj);
Expand Down Expand Up @@ -223,7 +227,12 @@ protected static Set<String> readFeatures(File configurationFile) throws Excepti
}

protected void runCompileAndGenerateFeatures() throws IOException, InterruptedException {
runProcess("compile liberty:generate-features");
runProcess("clean compile liberty:create liberty:generate-features");
}

protected void runCompileAndGenerateFeaturesToSrc() throws IOException, InterruptedException {
// do not create liberty when generating to src
runProcess("clean compile liberty:generate-features -DgenerateToSrc=true");
}

protected void runGenerateFeaturesGoal() throws IOException, InterruptedException {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* (c) Copyright IBM Corporation 2022.
* (c) Copyright IBM Corporation 2022, 2025
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -52,15 +52,26 @@ public void cleanUp() throws Exception {

@Test
public void basicTest() throws Exception {
runCompileAndGenerateFeatures();
// verify that the target directory was created
executeBasicTests(false);
}

private void executeBasicTests(boolean generateToSrc) throws Exception {
File featureFile;
if (generateToSrc) {
featureFile = newFeatureFileSrc;
runCompileAndGenerateFeaturesToSrc();
} else {
featureFile = newFeatureFile;
runCompileAndGenerateFeatures();
}
// verify that the target directory was created by compile goal
assertTrue(targetDir.exists());

// verify that the generated features file was created
assertTrue(formatOutput(processOutput), newFeatureFile.exists());
assertTrue(formatOutput(processOutput), featureFile.exists());

// verify that the correct features are in the generated-features.xml
Set<String> features = readFeatures(newFeatureFile);
Set<String> features = readFeatures(featureFile);
Set<String> expectedFeatures = getExpectedGeneratedFeaturesSet();
assertEquals(expectedFeatures.size(), features.size());
assertEquals(expectedFeatures, features);
Expand All @@ -72,11 +83,26 @@ public void basicTest() throws Exception {
"</featureManager>\n",
serverXmlFile);

runGenerateFeaturesGoal();
// no additional features should be generated
assertTrue(newFeatureFile.exists());
features = readFeatures(newFeatureFile);
assertEquals(0, features.size());
if (generateToSrc) {
// In src dir the generated file is preserved and contains no new features
runCompileAndGenerateFeaturesToSrc();
assertTrue(featureFile.exists());
features = readFeatures(featureFile);
assertEquals(formatOutput(processOutput), 0, features.size());
} else {
// the server dir is in target directory and a mvn clean is performed so it has been removed
runCompileAndGenerateFeatures();
assertFalse(featureFile.exists()); // after clean no feature file is created
}
}

@Test
public void generateToSrcTest() throws Exception {
newFeatureFile.delete(); // delete file if it exists but do not assert
assertFalse(newFeatureFileSrc.exists()); // assuming no other test creates this file
executeBasicTests(true);
assertTrue(newFeatureFileSrc.delete()); // clean up the generated file
}

@Test
Expand All @@ -91,6 +117,18 @@ public void noClassFiles() throws Exception {
assertTrue(processOutput.contains(GenerateFeaturesMojo.NO_CLASSES_DIR_WARNING));
}

@Test
public void noServer() throws Exception {
// do not create the server before running generate-features
runGenerateFeaturesGoal();

// verify that generated features file was not created
assertFalse(newFeatureFile.exists());

// verify server not found warning message
assertTrue(processOutput.contains(SERVER_MISSING_MESSAGE));
}

@Test
public void customFeaturesTest() throws Exception {
// complete the setup of the test
Expand All @@ -115,7 +153,7 @@ public void customFeaturesTest() throws Exception {
@Test
public void serverXmlCommentNoFMTest() throws Exception {
// initially the expected comment is not found in server.xml
assertFalse(verifyLogMessageExists(GenerateFeaturesMojo.FEATURES_FILE_MESSAGE, 10, serverXmlFile));
// assertFalse(verifyLogMessageExists(GenerateFeaturesMojo.FEATURES_FILE_MESSAGE, 10, serverXmlFile));
// also we wish to test behaviour when there is no <featureManager> element so test that
assertFalse(verifyLogMessageExists("<featureManager>", 10, serverXmlFile));

Expand All @@ -128,8 +166,8 @@ public void serverXmlCommentNoFMTest() throws Exception {
Charset charset = StandardCharsets.UTF_8;
String serverXmlContents = new String(Files.readAllBytes(serverXmlFile.toPath()), charset);
serverXmlContents = "\n" + serverXmlContents;
assertTrue(serverXmlContents,
verifyLogMessageExists(GenerateFeaturesMojo.FEATURES_FILE_MESSAGE, 100, serverXmlFile));
// assertTrue(serverXmlContents,
// verifyLogMessageExists(GenerateFeaturesMojo.FEATURES_FILE_MESSAGE, 100, serverXmlFile));
}

@Test
Expand All @@ -142,7 +180,7 @@ public void serverXmlCommentFMTest() throws Exception {
serverXmlFile);

// initially the expected comment is not found in server.xml
assertFalse(verifyLogMessageExists(GenerateFeaturesMojo.FEATURES_FILE_MESSAGE, 10, serverXmlFile));
// assertFalse(verifyLogMessageExists(GenerateFeaturesMojo.FEATURES_FILE_MESSAGE, 10, serverXmlFile));

runCompileAndGenerateFeatures();

Expand All @@ -153,8 +191,8 @@ public void serverXmlCommentFMTest() throws Exception {
Charset charset = StandardCharsets.UTF_8;
String serverXmlContents = new String(Files.readAllBytes(serverXmlFile.toPath()), charset);
serverXmlContents = "\n" + serverXmlContents;
assertTrue(serverXmlContents,
verifyLogMessageExists(GenerateFeaturesMojo.FEATURES_FILE_MESSAGE, 100, serverXmlFile));
// assertTrue(serverXmlContents,
// verifyLogMessageExists(GenerateFeaturesMojo.FEATURES_FILE_MESSAGE, 100, serverXmlFile));
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* (c) Copyright IBM Corporation 2022.
* (c) Copyright IBM Corporation 2022, 2025
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -40,6 +40,7 @@ public void setUp() throws Exception {
assertTrue(pom.exists());
replaceVersion(new File(tempProj, "pom")); // "pom" module is liberty configuration module
newFeatureFile = new File(tempProj, "pom" + GENERATED_FEATURES_FILE_PATH);
newFeatureFileSrc = new File(tempProj, "pom" + GENERATED_FEATURES_FILE_PATH_SRC);
serverXmlFile = new File(tempProj, "pom/src/main/liberty/config/server.xml");
targetDir = new File(tempProj, "war/target");
runProcess("install");
Expand All @@ -48,14 +49,20 @@ public void setUp() throws Exception {

@Override
protected void runCompileAndGenerateFeatures() throws IOException, InterruptedException {
runProcess("compile io.openliberty.tools:liberty-maven-plugin:" + System.getProperty("mavenPluginVersion")
+ ":generate-features");
String lmp = "io.openliberty.tools:liberty-maven-plugin:" + System.getProperty("mavenPluginVersion");
runProcess("clean compile " + lmp + ":create " + lmp + ":generate-features");
}

@Override
protected void runCompileAndGenerateFeaturesToSrc() throws IOException, InterruptedException {
String lmp = "io.openliberty.tools:liberty-maven-plugin:" + System.getProperty("mavenPluginVersion");
runProcess("clean compile " + lmp + ":generate-features -DgenerateToSrc=true");
}

@Override
protected void runGenerateFeaturesGoal() throws IOException, InterruptedException {
runProcess("io.openliberty.tools:liberty-maven-plugin:" + System.getProperty("mavenPluginVersion")
+ ":generate-features");
+ ":generate-features ");
}

@Override
Expand Down
Loading
Loading