간단하게 컨트롤러와 서비스 로직만 구현하였다.
우선 jplag를 사용하기 위해서
// jplag 유사도 검사
implementation 'de.jplag:jplag:3.0.0'
해당 의존성을 주입하여야한다.
이후
간단한 엔드포인트와
서비스 로직을 구현해준다.
@RestController
@RequestMapping("/api/jplag")
public class SimilarityContorller {
@Autowired
private SimilarityService similarityService;
@GetMapping("/compare")
public List<JPlagComparison> compareSolution(@RequestParam String solutionsPath) throws ExitException {
return similarityService.compareSoultions(solutionsPath);
}
}
@Service
public class SimilarityService {
public List<JPlagComparison> compareSoultions(String solutionPath) throws ExitException {
// jplag 옵션 설정
JPlagOptions options = new JPlagOptions(
solutionPath, // 비교할 폴더 경로
LanguageOption.PYTHON_3 // 언어 설정
);
// jplag 실행
JPlag jplag = new JPlag(options);
JPlagResult result = jplag.run();
// 유사도 비교 결과 확인
return result.getComparisons();
}
}
그러나 실행해보니 오류가 발생하였다.
java.lang.ExceptionInInitializerError: Exception java.lang.UnsupportedOperationException: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with version 3 (expected 4). [in thread "http-nio-8080-exec-1"]
파이썬 코드에 대해서 의존성을 맞춰줘야하나보다
// 파이썬 parser
implementation 'org.antlr:antlr4-runtime:4.9.3'
이제 다시 코끼리를 돌리고 실행해보니
http://localhost:8080/api/jplag/compare?solutionsPath=src/main/resources/solutions/1012/python
'AlgoMate' 카테고리의 다른 글
Celery + Redis vs Celery + RabbitMQ: 어떤 선택이 더 나을까? (0) | 2025.02.17 |
---|---|
🚀 동적으로 파일을 제공하는 방법 (2) | 2025.02.16 |
Spring Boot 단위 테스트: @Mock 과 @InjectionMocks의 원리와 활용 (2) | 2025.02.14 |
AlgoMate#3 - docker 로 띄운 DB 에 접근하기(PostgreSQL) (2) | 2025.02.01 |
Algomate#1 - 내 정답과 유사한 알고리즘의 정답을 추천해준다고??! (0) | 2025.01.30 |