mirror of
https://github.com/CarmJos/MineSQL.git
synced 2024-09-19 20:25:45 +00:00
添加JarResourceUtils 用于复制示例文件。
This commit is contained in:
parent
74f3328da0
commit
869a5df1fd
12
README.md
12
README.md
@ -15,6 +15,14 @@
|
|||||||
|
|
||||||
轻松(用)SQL的独立运行库插件,支持多种服务端,适用于MineCraft全版本。
|
轻松(用)SQL的独立运行库插件,支持多种服务端,适用于MineCraft全版本。
|
||||||
|
|
||||||
|
## 使用场景
|
||||||
|
|
||||||
|
### 对于插件使用者
|
||||||
|
|
||||||
|
### 对于插件开发者
|
||||||
|
|
||||||
|
### 额外提醒
|
||||||
|
|
||||||
## 安装
|
## 安装
|
||||||
|
|
||||||
## 配置
|
## 配置
|
||||||
@ -56,12 +64,12 @@ databases:
|
|||||||
|
|
||||||
示例配置请见 [示例MySQL数据源Properties](easysql-plugin-core/src/main/resources/db-properties/.example-mysql.properties)。
|
示例配置请见 [示例MySQL数据源Properties](easysql-plugin-core/src/main/resources/db-properties/.example-mysql.properties)。
|
||||||
|
|
||||||
|
Properties 文件的文件名几位数据源的ID,允许为英文、数字、下划线、短横线;请不要包含中文、其他特殊符号与空格,以`.`开头的文件将被忽略。
|
||||||
|
|
||||||
该功能一般用于专业开发者使用,若您不了解该功能,请尽量使用config.yml中提供的配置方式,简单便捷,能够满足大多数需求。
|
该功能一般用于专业开发者使用,若您不了解该功能,请尽量使用config.yml中提供的配置方式,简单便捷,能够满足大多数需求。
|
||||||
|
|
||||||
更多帮助详见 [BeeCP项目帮助](https://github.com/Chris2018998/BeeCP) 。
|
更多帮助详见 [BeeCP项目帮助](https://github.com/Chris2018998/BeeCP) 。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 开发
|
## 开发
|
||||||
|
|
||||||
### 依赖方式
|
### 依赖方式
|
||||||
|
@ -11,7 +11,7 @@ import co.aikar.commands.annotation.*;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static cc.carm.plugin.easysql.util.ResourceReadUtil.getVersion;
|
import static cc.carm.plugin.easysql.util.MavenReadUtil.getVersion;
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package cc.carm.plugin.easysql.util;
|
package cc.carm.plugin.easysql.util;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -8,26 +10,34 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
public class PropertiesUtil {
|
public class DBPropertiesUtil {
|
||||||
|
|
||||||
public static Map<String, Properties> readDBProperties(File propertiesFolder) {
|
public static Map<String, Properties> readFromFolder(File propertiesFolder) {
|
||||||
Map<String, Properties> propertiesMap = new HashMap<>();
|
Map<String, Properties> propertiesMap = new HashMap<>();
|
||||||
if (!propertiesFolder.isDirectory()) return propertiesMap;
|
if (!propertiesFolder.isDirectory()) return propertiesMap;
|
||||||
|
|
||||||
File[] files = propertiesFolder.listFiles();
|
File[] files = propertiesFolder.listFiles();
|
||||||
if (files == null || files.length == 0) return propertiesMap;
|
if (files == null || files.length == 0) return propertiesMap;
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
if (file.getName().startsWith(".") || !file.getName().endsWith(".properties")) continue;
|
if (!validateName(file.getName())) continue;
|
||||||
String name = file.getName().substring(0, file.getName().lastIndexOf("."));
|
String name = file.getName().substring(0, file.getName().lastIndexOf("."));
|
||||||
try (InputStream stream = new FileInputStream(file)) {
|
try (InputStream is = new FileInputStream(file)) {
|
||||||
Properties properties = new Properties();
|
propertiesMap.put(name, read(is));
|
||||||
properties.load(stream);
|
|
||||||
propertiesMap.put(name, properties);
|
|
||||||
} catch (IOException ignored) {
|
} catch (IOException ignored) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return propertiesMap;
|
return propertiesMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static @NotNull Properties read(InputStream stream) throws IOException {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.load(stream);
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean validateName(String name) {
|
||||||
|
return !name.contains(" ") && !name.startsWith(".") && name.endsWith(".properties");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,105 @@
|
|||||||
|
package cc.carm.plugin.easysql.util;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Scanner;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipInputStream;
|
||||||
|
|
||||||
|
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||||
|
public class JarResourceUtils {
|
||||||
|
public static final char JAR_SEPARATOR = '/';
|
||||||
|
|
||||||
|
public static @Nullable String[] readResource(@Nullable InputStream resourceStream) {
|
||||||
|
if (resourceStream == null) return null;
|
||||||
|
try (Scanner scanner = new Scanner(resourceStream, "UTF-8")) {
|
||||||
|
List<String> contents = new ArrayList<>();
|
||||||
|
while (scanner.hasNextLine()) {
|
||||||
|
contents.add(scanner.nextLine());
|
||||||
|
}
|
||||||
|
return contents.toArray(new String[0]);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void copyFolderFromJar(String folderName, File destFolder, CopyOption option)
|
||||||
|
throws IOException {
|
||||||
|
copyFolderFromJar(folderName, destFolder, option, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void copyFolderFromJar(String folderName, File destFolder,
|
||||||
|
CopyOption option, PathTrimmer trimmer) throws IOException {
|
||||||
|
if (!destFolder.exists())
|
||||||
|
destFolder.mkdirs();
|
||||||
|
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
|
||||||
|
File fullPath;
|
||||||
|
String path = JarResourceUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath();
|
||||||
|
if (trimmer != null)
|
||||||
|
path = trimmer.trim(path);
|
||||||
|
try {
|
||||||
|
if (!path.startsWith("file"))
|
||||||
|
path = "file://" + path;
|
||||||
|
|
||||||
|
fullPath = new File(new URI(path));
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZipInputStream zis = new ZipInputStream(new FileInputStream(fullPath));
|
||||||
|
|
||||||
|
ZipEntry entry;
|
||||||
|
while ((entry = zis.getNextEntry()) != null) {
|
||||||
|
if (!entry.getName().startsWith(folderName + JAR_SEPARATOR))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
String fileName = entry.getName();
|
||||||
|
|
||||||
|
if (fileName.charAt(fileName.length() - 1) == JAR_SEPARATOR) {
|
||||||
|
File file = new File(destFolder + File.separator + fileName);
|
||||||
|
if (file.isFile()) {
|
||||||
|
file.delete();
|
||||||
|
}
|
||||||
|
file.mkdirs();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = new File(destFolder + File.separator + fileName);
|
||||||
|
if (option == CopyOption.COPY_IF_NOT_EXIST && file.exists())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!file.getParentFile().exists())
|
||||||
|
file.getParentFile().mkdirs();
|
||||||
|
|
||||||
|
if (!file.exists())
|
||||||
|
file.createNewFile();
|
||||||
|
FileOutputStream fos = new FileOutputStream(file);
|
||||||
|
|
||||||
|
int len;
|
||||||
|
while ((len = zis.read(buffer)) > 0) {
|
||||||
|
fos.write(buffer, 0, len);
|
||||||
|
}
|
||||||
|
fos.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
zis.closeEntry();
|
||||||
|
zis.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum CopyOption {
|
||||||
|
COPY_IF_NOT_EXIST, REPLACE_IF_EXIST
|
||||||
|
}
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface PathTrimmer {
|
||||||
|
String trim(String original);
|
||||||
|
}
|
||||||
|
}
|
@ -4,26 +4,9 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Scanner;
|
|
||||||
|
|
||||||
public class ResourceReadUtil {
|
public class MavenReadUtil {
|
||||||
|
|
||||||
|
|
||||||
public static @Nullable String[] readResource(@Nullable InputStream resourceStream) {
|
|
||||||
if (resourceStream == null) return null;
|
|
||||||
try (Scanner scanner = new Scanner(resourceStream, "UTF-8")) {
|
|
||||||
List<String> contents = new ArrayList<>();
|
|
||||||
while (scanner.hasNextLine()) {
|
|
||||||
contents.add(scanner.nextLine());
|
|
||||||
}
|
|
||||||
return contents.toArray(new String[0]);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getMavenPropertiesPath(@NotNull String groupID, @NotNull String artifactID) {
|
public static String getMavenPropertiesPath(@NotNull String groupID, @NotNull String artifactID) {
|
||||||
return String.format("/META-INF/maven/%s/%s/pom.properties", groupID, artifactID);
|
return String.format("/META-INF/maven/%s/%s/pom.properties", groupID, artifactID);
|
@ -4,8 +4,8 @@ import cc.carm.lib.easyplugin.EasyPlugin;
|
|||||||
import cc.carm.lib.easyplugin.i18n.EasyPluginMessageProvider;
|
import cc.carm.lib.easyplugin.i18n.EasyPluginMessageProvider;
|
||||||
import cc.carm.lib.easysql.api.SQLManager;
|
import cc.carm.lib.easysql.api.SQLManager;
|
||||||
import cc.carm.plugin.easysql.api.DBConfiguration;
|
import cc.carm.plugin.easysql.api.DBConfiguration;
|
||||||
import cc.carm.plugin.easysql.util.PropertiesUtil;
|
import cc.carm.plugin.easysql.util.JarResourceUtils;
|
||||||
import cc.carm.plugin.easysql.util.ResourceReadUtil;
|
import cc.carm.plugin.easysql.util.DBPropertiesUtil;
|
||||||
import cn.beecp.BeeDataSource;
|
import cn.beecp.BeeDataSource;
|
||||||
import co.aikar.commands.PaperCommandManager;
|
import co.aikar.commands.PaperCommandManager;
|
||||||
import org.bstats.bukkit.Metrics;
|
import org.bstats.bukkit.Metrics;
|
||||||
@ -111,12 +111,12 @@ public class EasySQLBukkit extends EasyPlugin implements EasySQLPluginPlatform {
|
|||||||
if (!getConfiguration().isPropertiesEnabled()) return new HashMap<>();
|
if (!getConfiguration().isPropertiesEnabled()) return new HashMap<>();
|
||||||
String propertiesFolder = getConfiguration().getPropertiesFolder();
|
String propertiesFolder = getConfiguration().getPropertiesFolder();
|
||||||
if (propertiesFolder == null || propertiesFolder.length() == 0) return new HashMap<>();
|
if (propertiesFolder == null || propertiesFolder.length() == 0) return new HashMap<>();
|
||||||
else return PropertiesUtil.readDBProperties(new File(getDataFolder(), propertiesFolder));
|
else return DBPropertiesUtil.readFromFolder(new File(getDataFolder(), propertiesFolder));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void outputInfo() {
|
public void outputInfo() {
|
||||||
Optional.ofNullable(ResourceReadUtil.readResource(this.getResource("PLUGIN_INFO"))).ifPresent(this::log);
|
Optional.ofNullable(JarResourceUtils.readResource(this.getResource("PLUGIN_INFO"))).ifPresent(this::log);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EasySQLBukkit getInstance() {
|
public static EasySQLBukkit getInstance() {
|
||||||
|
Loading…
Reference in New Issue
Block a user