2016-10-18 1 views
3

저는 전적으로 Java로 구성된 Maven 프로젝트를 작업 해 왔으며 최근에는 스칼라 코드를이 프로젝트에 혼합하기 시작했습니다.Maven 프로젝트를 위해 Scala와 Java 소스 파일을 분리하는 것이 좋습니까?

스칼라가 제공하는 뛰어난 표현력, scala-maven-plugin의 쉬운 사용법, 특히 자바와 스칼라 간의 믿을 수없는 상호 운용성에 놀라움을 금치 못합니다.

그러나 한 가지 불편을 겪었습니다. Maven의 협약에 따르면 Java의 소스 코드는 src/main/java으로, 반면 Scala는 src/main/scala입니다. 나는 자주 Java와 Scala 소스 파일을 앞뒤로 가야하기 때문에 패키지 디렉토리의 깊은 계층을 트래버스해야 할 때마다 (종종 필자의 편집기를 복잡하게 만드는 탭을 닫는다.

그래서 질문은입니다. src/main/javasrc/main/scala이라는 별도의 디렉토리를 유지 관리 할 것을 권장합니까? 그렇다면 왜?

배경을 더 추가하기 위해 웹 애플리케이션 프레임 워크 Wicket에서 HTML 파일을 해당 Java 파일과 나란히 배치하는 방법을 연구했습니다. 디렉토리를 분리하여 보관하면 HTML 파일도 자연스럽게 분리됩니다 (저는 스칼라 파일과 해당 HTML 파일을 다른 디렉토리에 두는 것이 합리적이라고 생각하지 않습니다). 그리고 나서 "Foo.html을 찾을 수없는 이유는 무엇입니까?"오, 잘못된 디렉토리를 찾고있었습니다. "

소스 파일 자체는 확장 프로그램을 검사하여 사람과 기계가 구분하기가 쉽습니다. Java와 Scala를 모두 처리 할 수 ​​있도록 pom.xml을 구성하여 src/main/java에 넣었습니다 (이 컴파일되어으로 실행 됨). 반면에 디렉토리를 분리하면 자바와 스칼라에서 부주의 한 실수로 상충되는 클래스를 정의 할 위험이 있습니다.

글쎄, 나는 자바뿐만 아니라 스칼라도 포함하고 있다면 java 디렉토리의 이름을 지정하고 싶지 않다. 그러나 이것은 디렉토리를 구분할 수있는 유일한 포인트입니다.
(편집 : 해결 방법을 생각해 냈습니다. javaJava 가상 머신을 의미합니다. 이런 식으로 src/main/c을 갖는 것은 C가 JNI를 사용하기로 결정했다면 모순되지 않습니다. JVM에서 실행하십시오.)

아, 그리고 또 하나의 포인트; 내 프로젝트는 오픈 소스 프로젝트로 의도 된 것이 아닙니다. 협약을 따르기 위해 열심히 노력하는 것보다 개발 편의성이 더 좋습니다.

이 질문은 영감을 받아 this answer입니다.

+1

IDE를 사용하고 파일 배치 방법이 중요하지 않습니다. Ctrl + 클릭하여 모든 수업을 열 수 있습니다. 아마도 편집기 사용에서 Java/Scala 용 도구 디자인 사용으로 전환해야 할 때입니다. 또한 IDE는 훨씬 더 많은 작업을 수행합니다. IDE를 사용하기 전에 얼마나 많은 시간을 낭비했는지 믿지 않을 것입니다. –

+1

IDE를 알고 있습니다. Eclipse를 5 년 이상 사용해 왔고 터미널 기반 환경 (vim)으로 전환했습니다. 나는 기술적으로 Eclipse를 사용하고 있지만 Java/Scala 혼합 프로젝트와 함께 작동하도록 구성하지는 못했기 때문에 eclim을 사용하고 있습니다. 마우스 기반 환경으로 돌아가고 싶지 않습니다. 필자는 파일러/점퍼/import-organizer 등을 사용하기 위해 "다른 OS"를 구성하는 것에 싫증이났다. 나는 코딩 작업을하는 동안 후드 아래에서 진행되는 작업을 연구하기 위해 _Tools_을 내 손으로 사용하는 것을 좋아합니다. – Ohashi

+0

IntelliJ를 여러 컴퓨터에서 사용하고 아무것도 재구성하지 않아도됩니다. (아마도 기본값으로 살아서 기쁩니다.) 모든 기능에 단축키를 사용할 수 있으며 마우스를 사용한다고 느끼지 않습니다. 많은. –

답변

0

나는 가능한 한 많이 코드를 재사용한다고 말하고 싶습니다. 어쩌면 앞으로이 Java 피스를 다른 곳에서 사용할 수있을 것입니다 ...

아마 알다시피 Java 프로젝트에서는 Scala가 아니라 Java 프로젝트에서는 Java를 사용할 수 있습니다. 그래서이 구체적인 예제에서 (미래의) 자바 프로젝트에 도움이 될 것입니다. Java 코드 조각을 다시 사용하려면 Scala 프로젝트뿐만 아니라 Java 프로젝트에서도이 코드를 사용할 수 있습니다.

그래서 i.m.h.o. 그것은 src/main/...에서 멈추지 않습니다. 그러나 여러분은 그것들을 다른 구성 요소에 넣어야합니다.


, BTW 작은 보조 노트 : 나는 올바른 해요 경우, 개찰구는 당신도 다른 프로젝트에, 너무 다른 곳 HTML을 넣을 수 있습니다 ...우리가 다른 고객을 위해 다른 프론트 엔드를 만들어야 만했던 한 번만 편리하다는 것을 알았습니다. 자바 코드는 동일하게 유지되었지만 개찰구 ID도 마찬가지지만 html이 모든 곳에서 변경되었습니다. Qwicky 플러그인을 사용할 때 몇 가지 문제가 있었지만 IDE에서 html 파일을 더 이상 찾을 수 없었습니다.

+1

원본과의 호환성을 의미합니까? 그런 다음 코드를 이해하는 것은 프로그래머의 책임입니다. 'java'는 적절한 classpath 설정으로 scala 프로그램을 실행할 수 있으므로 바이너리 호환성 (또는 실행 가능성)이 문제가되어서는 안됩니다. – Ohashi

+0

아, 네 말이 맞아. 그렇다면 아직도 어떤 식 으로든 다른 폴더 나 심지어 프로젝트가 섞여 있지 않을 것 같아요. –

+0

어떤면에서 보면 수정이 더 쉽게 이루어질 것 같지만 앞으로는 더 이상 할 수 없습니다. 정말 좋은 이유는 아직 찾지 못했습니다. –

관련 문제