дробим проект на субмодули

This commit is contained in:
2022-04-28 13:41:57 +03:00
parent e2fc75877d
commit a868b66e0c
24 changed files with 161 additions and 133 deletions

15
.editorconfig Normal file
View File

@@ -0,0 +1,15 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
[gradlew.bat]
charset = latin1
end_of_line = crlf
[*.{yml,yaml}]
indent_size = 2

View File

@@ -1,44 +1,37 @@
plugins {
id 'org.springframework.boot' version '2.6.6'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
//file:noinspection GrUnresolvedAccess
buildscript {
apply from: 'versions.gradle'
group = 'ru.di9'
version = '1.0-SNAPSHOT'
compileJava {
targetCompatibility = sourceCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral()
}
dependencies {
annotationProcessor('org.projectlombok:lombok')
compileOnly('org.projectlombok:lombok')
annotationProcessor('org.springframework.boot:spring-boot-configuration-processor')
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('org.springframework.boot:spring-boot-starter-aop')
implementation('com.squareup.okhttp3:okhttp:4.9.3')
}
tasks.named('compileJava') {
it.dependsOn('moveSpringConfigurationMetadata')
}
tasks.register('moveSpringConfigurationMetadata').configure {
it.dependsOn('processResources')
doLast {
def metafile = file("${sourceSets.main.output.resourcesDir}/META-INF/additional-spring-configuration-metadata.json")
if (metafile.exists()) {
def metafileTo = file("${sourceSets.main.output.classesDirs.asPath}/META-INF/spring-configuration-metadata.json")
metafileTo.parentFile.mkdirs()
metafile.renameTo(metafileTo)
}
repositories {
maven { url 'https://plugins.gradle.org/m2/' }
}
dependencies {
// https://plugins.gradle.org/plugin/org.springframework.boot
classpath "org.springframework.boot:spring-boot-gradle-plugin:${pluginSpringBootVerson}"
// https://plugins.gradle.org/plugin/io.spring.dependency-management
classpath "io.spring.gradle:dependency-management-plugin:${pluginSpringBomVerson}"
}
}
subprojects {
apply plugin: 'java'
group = 'ru.di9'
compileJava {
targetCompatibility = sourceCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral()
}
dependencies {
annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
compileOnly("org.projectlombok:lombok:${lombokVersion}")
}
configurations.implementation.resolutionStrategy {
failOnVersionConflict()
}
}

5
mirror-app/build.gradle Normal file
View File

@@ -0,0 +1,5 @@
apply plugin: 'java-library'
dependencies {
api("com.squareup.okhttp3:okhttp:${okhttpVersion}")
}

View File

@@ -1,4 +1,4 @@
package ru.di9.mirror;
package ru.di9.mirror.app;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

View File

@@ -1,4 +1,4 @@
package ru.di9.mirror.domain;
package ru.di9.mirror.app.domain;
import java.io.InputStream;

View File

@@ -1,4 +1,4 @@
package ru.di9.mirror.domain;
package ru.di9.mirror.app.domain;
public record PathRecord(String name, PathType type) {
}

View File

@@ -1,4 +1,4 @@
package ru.di9.mirror.domain;
package ru.di9.mirror.app.domain;
public enum PathType {
FILE, DIRECTORY

View File

@@ -1,4 +1,4 @@
package ru.di9.mirror.domain;
package ru.di9.mirror.app.domain;
import java.util.List;

View File

@@ -1,12 +1,10 @@
package ru.di9.mirror.services;
package ru.di9.mirror.app.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import ru.di9.mirror.Utils;
import ru.di9.mirror.domain.FileRecord;
import ru.di9.mirror.domain.PathRecord;
import ru.di9.mirror.domain.PathType;
import ru.di9.mirror.domain.WalkerResult;
import ru.di9.mirror.app.Utils;
import ru.di9.mirror.app.domain.FileRecord;
import ru.di9.mirror.app.domain.PathRecord;
import ru.di9.mirror.app.domain.PathType;
import ru.di9.mirror.app.domain.WalkerResult;
import java.io.IOException;
import java.io.InputStream;
@@ -19,12 +17,11 @@ import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
@Service
public class FileStorageService implements StorageService {
private final Path storagePath;
public FileStorageService(@Value("${maven.storage}") String storagePath) {
public FileStorageService(String storagePath) {
this.storagePath = Paths.get(storagePath).resolve("local");
}

View File

@@ -1,17 +1,15 @@
package ru.di9.mirror.services;
package ru.di9.mirror.app.service;
import lombok.SneakyThrows;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.springframework.stereotype.Service;
import ru.di9.mirror.domain.FileRecord;
import ru.di9.mirror.app.domain.FileRecord;
import java.io.IOException;
import java.util.Objects;
import java.util.Optional;
@Service
public class MavenCentralStorageService extends MirrorService {
private static final String MAVEN_CENTRAL_URL = "https://repo1.maven.org/maven2";

View File

@@ -1,6 +1,6 @@
package ru.di9.mirror.services;
package ru.di9.mirror.app.service;
import ru.di9.mirror.domain.WalkerResult;
import ru.di9.mirror.app.domain.WalkerResult;
import java.io.InputStream;
import java.util.Optional;

View File

@@ -1,14 +1,13 @@
package ru.di9.mirror.services;
package ru.di9.mirror.app.service;
import org.springframework.stereotype.Service;
import ru.di9.mirror.domain.FileRecord;
import ru.di9.mirror.domain.WalkerResult;
import ru.di9.mirror.app.domain.FileRecord;
import ru.di9.mirror.app.domain.WalkerResult;
import java.io.InputStream;
import java.util.List;
import java.util.Optional;
@Service
@SuppressWarnings("ClassCanBeRecord")
public class MirroredStorageService implements StorageService {
private final FileStorageService fileStorageService;

View File

@@ -1,7 +1,7 @@
package ru.di9.mirror.services;
package ru.di9.mirror.app.service;
import ru.di9.mirror.domain.FileRecord;
import ru.di9.mirror.domain.WalkerResult;
import ru.di9.mirror.app.domain.FileRecord;
import ru.di9.mirror.app.domain.WalkerResult;
import java.io.InputStream;
import java.util.Optional;

25
mirror-web/build.gradle Normal file
View File

@@ -0,0 +1,25 @@
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
dependencies {
implementation(project(':mirror-app'))
annotationProcessor('org.springframework.boot:spring-boot-configuration-processor')
implementation('org.springframework.boot:spring-boot-starter-web')
}
tasks.named('compileJava') {
it.dependsOn('moveSpringConfigurationMetadata')
}
tasks.register('moveSpringConfigurationMetadata').configure {
it.dependsOn('processResources')
doLast {
def metafile = file("${sourceSets.main.output.resourcesDir}/META-INF/additional-spring-configuration-metadata.json")
if (metafile.exists()) {
def metafileTo = file("${sourceSets.main.output.classesDirs.asPath}/META-INF/spring-configuration-metadata.json")
metafileTo.parentFile.mkdirs()
metafile.renameTo(metafileTo)
}
}
}

View File

@@ -1,4 +1,4 @@
package ru.di9.mirror;
package ru.di9.mirror.web;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -6,8 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

View File

@@ -0,0 +1,31 @@
package ru.di9.mirror.web.config;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.di9.mirror.app.service.*;
import java.util.List;
@Configuration
public class WebConfig {
@Bean
public StorageService mirroredStorageService(FileStorageService fileStorageService,
List<MirrorService> mirrors) {
return new MirroredStorageService(fileStorageService, mirrors);
}
@Bean
public FileStorageService fileStorageService(@Value("${maven.storage}") String storagePath) {
return new FileStorageService(storagePath);
}
@Bean
public List<MirrorService> mirrors() {
return List.of(
new MavenCentralStorageService(new OkHttpClient())
);
}
}

View File

@@ -1,4 +1,4 @@
package ru.di9.mirror.controller;
package ru.di9.mirror.web.controller;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.io.InputStreamResource;
@@ -10,12 +10,12 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import ru.di9.mirror.Utils;
import ru.di9.mirror.domain.FileRecord;
import ru.di9.mirror.domain.PathRecord;
import ru.di9.mirror.domain.PathType;
import ru.di9.mirror.domain.WalkerResult;
import ru.di9.mirror.services.StorageService;
import ru.di9.mirror.app.Utils;
import ru.di9.mirror.app.domain.FileRecord;
import ru.di9.mirror.app.domain.PathRecord;
import ru.di9.mirror.app.domain.PathType;
import ru.di9.mirror.app.domain.WalkerResult;
import ru.di9.mirror.app.service.StorageService;
import java.util.List;
import java.util.Optional;

View File

@@ -1,4 +1,4 @@
package ru.di9.mirror.controller;
package ru.di9.mirror.web.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -12,8 +12,8 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import ru.di9.mirror.domain.FileRecord;
import ru.di9.mirror.services.StorageService;
import ru.di9.mirror.app.domain.FileRecord;
import ru.di9.mirror.app.service.StorageService;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@@ -41,11 +41,11 @@ public class MavenController {
FileRecord fileRecord = fileRecordOptional.get();
responseEntity = ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=\"" + fileRecord.name() + "\"")
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.contentLength(fileRecord.size())
.body(new InputStreamResource(fileRecord.inputStream()));
.header(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=\"" + fileRecord.name() + "\"")
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.contentLength(fileRecord.size())
.body(new InputStreamResource(fileRecord.inputStream()));
}
return responseEntity;

View File

@@ -1 +1,4 @@
rootProject.name = 'project-mirror'
include('mirror-app')
include('mirror-web')

View File

@@ -1,30 +0,0 @@
package ru.di9.mirror.aspect;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Slf4j
@Aspect
@Component
public class LoggerAspect {
@Around("execution(* ru.di9.mirror.controller.MavenController.*(..))")
public Object logAroundMavenController(ProceedingJoinPoint joinPoint) throws Throwable {
return logAround(joinPoint);
}
@Around("execution(* ru.di9.mirror.controller.IndexOfMavenController.*(..))")
public Object logAroundIndexOfMavenController(ProceedingJoinPoint joinPoint) throws Throwable {
return logAround(joinPoint);
}
private Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
log.info("[ASPECT] enter {} <- {}", joinPoint.getSignature().toLongString(), joinPoint.getArgs());
Object result = joinPoint.proceed();
log.info("[ASPECT] exit {} -> [{}]", joinPoint.getSignature().toLongString(), result);
return result;
}
}

View File

@@ -1,14 +0,0 @@
package ru.di9.mirror.config;
import okhttp3.OkHttpClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Config {
@Bean
public OkHttpClient okHttpClient() {
return new OkHttpClient();
}
}

7
versions.gradle Normal file
View File

@@ -0,0 +1,7 @@
ext {
lombokVersion = '1.18.20'
okhttpVersion = '4.9.3'
pluginSpringBootVerson = '2.6.6'
pluginSpringBomVerson = '1.0.11.RELEASE'
}