Use platform-neutral path composition
This commit is contained in:
@@ -515,7 +515,7 @@ public class ApiDocWindow {
|
|||||||
Path projDir = Paths.get(projPath);
|
Path projDir = Paths.get(projPath);
|
||||||
if (!Files.isDirectory(projDir)) continue;
|
if (!Files.isDirectory(projDir)) continue;
|
||||||
List<Path> srcBases = new ArrayList<>();
|
List<Path> srcBases = new ArrayList<>();
|
||||||
Path selfSrc = projDir.resolve("src/main/java");
|
Path selfSrc = projDir.resolve(Path.of("src", "main", "java"));
|
||||||
if (Files.isDirectory(selfSrc)) srcBases.add(selfSrc);
|
if (Files.isDirectory(selfSrc)) srcBases.add(selfSrc);
|
||||||
try (Stream<Path> children = Files.list(projDir)) {
|
try (Stream<Path> children = Files.list(projDir)) {
|
||||||
children.filter(Files::isDirectory)
|
children.filter(Files::isDirectory)
|
||||||
@@ -579,7 +579,7 @@ public class ApiDocWindow {
|
|||||||
for (String projPath : selectedPaths) {
|
for (String projPath : selectedPaths) {
|
||||||
Path projDir = Paths.get(projPath);
|
Path projDir = Paths.get(projPath);
|
||||||
if (!Files.isDirectory(projDir)) continue;
|
if (!Files.isDirectory(projDir)) continue;
|
||||||
Path selfSrc = projDir.resolve("src/main/java");
|
Path selfSrc = projDir.resolve(Path.of("src", "main", "java"));
|
||||||
String key = selfSrc.toString().replace('\\', '/');
|
String key = selfSrc.toString().replace('\\', '/');
|
||||||
if (Files.isDirectory(selfSrc) && seenSrcBases.add(key)) {
|
if (Files.isDirectory(selfSrc) && seenSrcBases.add(key)) {
|
||||||
modules.add(new ModuleInfo(projDir.getFileName().toString(), projPath, selfSrc));
|
modules.add(new ModuleInfo(projDir.getFileName().toString(), projPath, selfSrc));
|
||||||
@@ -905,7 +905,7 @@ public class ApiDocWindow {
|
|||||||
|
|
||||||
private void collectSrcBases(Path dir, List<Path> srcBases) {
|
private void collectSrcBases(Path dir, List<Path> srcBases) {
|
||||||
if (!Files.isDirectory(dir)) return;
|
if (!Files.isDirectory(dir)) return;
|
||||||
Path sb = dir.resolve("src/main/java");
|
Path sb = dir.resolve(Path.of("src", "main", "java"));
|
||||||
if (Files.isDirectory(sb)) srcBases.add(sb);
|
if (Files.isDirectory(sb)) srcBases.add(sb);
|
||||||
try (Stream<Path> children = Files.list(dir)) {
|
try (Stream<Path> children = Files.list(dir)) {
|
||||||
children.filter(Files::isDirectory).filter(d -> !d.getFileName().toString().startsWith("."))
|
children.filter(Files::isDirectory).filter(d -> !d.getFileName().toString().startsWith("."))
|
||||||
@@ -932,7 +932,7 @@ public class ApiDocWindow {
|
|||||||
|
|
||||||
private void collectModules(Path dir, List<ModuleInfo> modules, Set<String> seen) {
|
private void collectModules(Path dir, List<ModuleInfo> modules, Set<String> seen) {
|
||||||
if (!Files.isDirectory(dir)) return;
|
if (!Files.isDirectory(dir)) return;
|
||||||
Path sb = dir.resolve("src/main/java");
|
Path sb = dir.resolve(Path.of("src", "main", "java"));
|
||||||
String key = sb.toString().replace('\\', '/');
|
String key = sb.toString().replace('\\', '/');
|
||||||
if (Files.isDirectory(sb) && seen.add(key)) {
|
if (Files.isDirectory(sb) && seen.add(key)) {
|
||||||
modules.add(new ModuleInfo(dir.getFileName().toString(),
|
modules.add(new ModuleInfo(dir.getFileName().toString(),
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ public class JavaSourceParser {
|
|||||||
* 扫描项目目录下所有 .java 文件(自动追加 src/main/java)
|
* 扫描项目目录下所有 .java 文件(自动追加 src/main/java)
|
||||||
*/
|
*/
|
||||||
public List<Path> findJavaFiles(Path projectPath) {
|
public List<Path> findJavaFiles(Path projectPath) {
|
||||||
Path javaSrc = projectPath.resolve("src/main/java");
|
Path javaSrc = projectPath.resolve(Path.of("src", "main", "java"));
|
||||||
if (!Files.isDirectory(javaSrc)) {
|
if (!Files.isDirectory(javaSrc)) {
|
||||||
log.debug("项目 {} 没有 src/main/java 目录", projectPath);
|
log.debug("项目 {} 没有 src/main/java 目录", projectPath);
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
|
|||||||
+3
-3
@@ -10,9 +10,9 @@ public final class OutputLayoutPolicy {
|
|||||||
Path root = requireProjectRoot(projectRoot);
|
Path root = requireProjectRoot(projectRoot);
|
||||||
return new OutputLayout(
|
return new OutputLayout(
|
||||||
root,
|
root,
|
||||||
root.resolve("src/main/java"),
|
root.resolve(Path.of("src", "main", "java")),
|
||||||
root.resolve("src/main/resources"),
|
root.resolve(Path.of("src", "main", "resources")),
|
||||||
root.resolve("src/main/java"));
|
root.resolve(Path.of("src", "main", "java")));
|
||||||
}
|
}
|
||||||
|
|
||||||
public OutputLayout custom(
|
public OutputLayout custom(
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ public class FileOperationHelper {
|
|||||||
public String generateFileName(String baseDirectory, String prefix, String extension) {
|
public String generateFileName(String baseDirectory, String prefix, String extension) {
|
||||||
String timestamp = java.time.LocalDateTime.now()
|
String timestamp = java.time.LocalDateTime.now()
|
||||||
.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss"));
|
.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss"));
|
||||||
return String.format("%s/%s_%s.%s", baseDirectory, prefix, timestamp, extension);
|
String fileName = String.format("%s_%s.%s", prefix, timestamp, extension);
|
||||||
|
return Paths.get(baseDirectory).resolve(fileName).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String generateFileName(String prefix, String extension) {
|
public String generateFileName(String prefix, String extension) {
|
||||||
|
|||||||
+3
-3
@@ -21,9 +21,9 @@ class OutputLayoutPolicyTest {
|
|||||||
|
|
||||||
Path root = tempDir.toAbsolutePath().normalize();
|
Path root = tempDir.toAbsolutePath().normalize();
|
||||||
assertEquals(root, layout.projectRoot());
|
assertEquals(root, layout.projectRoot());
|
||||||
assertEquals(root.resolve("src/main/java"), layout.modelDirectory());
|
assertEquals(root.resolve(Path.of("src", "main", "java")), layout.modelDirectory());
|
||||||
assertEquals(root.resolve("src/main/resources"), layout.xmlDirectory());
|
assertEquals(root.resolve(Path.of("src", "main", "resources")), layout.xmlDirectory());
|
||||||
assertEquals(root.resolve("src/main/java"), layout.mapperDirectory());
|
assertEquals(root.resolve(Path.of("src", "main", "java")), layout.mapperDirectory());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.example.workutils.system.support;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
class FileOperationHelperPathTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void emptyBaseDirectoryProducesRelativeFileName() {
|
||||||
|
String generated = new FileOperationHelper().generateFileName("", "报告", "html");
|
||||||
|
Path path = Path.of(generated);
|
||||||
|
|
||||||
|
assertFalse(path.isAbsolute());
|
||||||
|
assertNull(path.getRoot());
|
||||||
|
assertTrue(path.getFileName().toString().matches("报告_\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{2}\\.html"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void baseDirectoryWithSpacesAndChineseIsPreserved() {
|
||||||
|
Path base = Path.of("build", "输出 空间");
|
||||||
|
Path generated = Path.of(new FileOperationHelper()
|
||||||
|
.generateFileName(base.toString(), "报告", "html"));
|
||||||
|
|
||||||
|
assertTrue(generated.startsWith(base));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user