fix: enable newly added plugins with existing config

This commit is contained in:
张家训
2026-08-04 17:45:27 +08:00
parent 556ab32e5f
commit 9676c81455
3 changed files with 26 additions and 20 deletions
@@ -256,25 +256,31 @@ public class PluginManager {
String orderStr = props.getProperty("plugins.order");
String disabledStr = props.getProperty("plugins.disabled");
if (orderStr == null || orderStr.trim().isEmpty()) return null;
String[] ids = orderStr.split(",");
List<String> disabledList = new ArrayList<>();
Set<String> disabledIds = new HashSet<>();
if (disabledStr != null && !disabledStr.trim().isEmpty()) {
for (String s : disabledStr.split(",")) {
disabledList.add(s.trim());
disabledIds.add(s.trim());
}
}
java.util.Set<String> result = new java.util.LinkedHashSet<>();
for (String id : ids) {
id = id.trim();
if (id.isEmpty()) continue;
if (!disabledList.contains(id)) {
result.add(id);
if (orderStr != null && !orderStr.trim().isEmpty()) {
for (String rawId : orderStr.split(",")) {
String id = rawId.trim();
if (!id.isEmpty() && !disabledIds.contains(id)) {
result.add(id);
}
}
}
return result.isEmpty() ? null : result;
// plugins.order only controls ordering. A plugin introduced by a newer
// WorkUtils version is enabled by default unless explicitly disabled.
allPlugins.stream()
.sorted(Comparator.comparingInt(plugin -> plugin.getDescriptor().getOrder()))
.map(Plugin::getId)
.filter(id -> !disabledIds.contains(id))
.forEach(result::add);
return result;
} catch (IOException e) {
log.warn("读取插件配置文件失败: {}", file.toAbsolutePath(), e);
return null;
+1 -1
View File
@@ -1,5 +1,5 @@
# ====== WorkUtils 插件配置文件 ======
# 插件顺序(按逗号分隔,顺序即菜单显示顺序)
# 插件状态(disabled 列表,不在列表中的即为启用)
plugins.order=git-sync,git-review,diff,mybatisexport,mybatisgenerator,scan,api-doc
plugins.order=git-sync,git-review,diff,ai-unit-test,mybatisexport,mybatisgenerator,scan,api-doc
plugins.disabled=mobile-ui-auto
@@ -4,7 +4,6 @@ import com.example.workutils.system.config.WorkUtilsProperties;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
@@ -17,12 +16,12 @@ class DefaultPluginConfigurationTest {
Path tempDir;
@Test
void defaultConfigurationLoadsEveryPluginExceptMobileAutomation() throws Exception {
void existingConfigurationAutomaticallyEnablesNewPluginsUnlessExplicitlyDisabled() throws Exception {
Path configFile = tempDir.resolve("plugins.config");
try (InputStream input = getClass().getClassLoader()
.getResourceAsStream("templates/plugins.config")) {
Files.copy(input, configFile);
}
Files.writeString(configFile, """
plugins.order=git-sync,git-review,diff,mybatisexport,mybatisgenerator,scan,api-doc
plugins.disabled=mobile-ui-auto
""");
WorkUtilsProperties properties = new WorkUtilsProperties();
properties.setPluginsConfigFile(configFile.toString());
@@ -30,6 +29,7 @@ class DefaultPluginConfigurationTest {
plugin("scan"),
plugin("diff"),
plugin("api-doc"),
plugin("ai-unit-test"),
plugin("git-sync"),
plugin("git-review"),
plugin("mobile-ui-auto"),
@@ -39,10 +39,10 @@ class DefaultPluginConfigurationTest {
PluginManager manager = new PluginManager(plugins, properties);
manager.init();
assertEquals(7, manager.getEnabledPlugins().size());
assertEquals(8, manager.getEnabledPlugins().size());
assertEquals(
List.of("git-sync", "git-review", "diff", "mybatisexport",
"mybatisgenerator", "scan", "api-doc"),
"mybatisgenerator", "scan", "api-doc", "ai-unit-test"),
manager.getEnabledPlugins().stream().map(Plugin::getId).toList());
}