2008-09-24 8 views
11

Java 프로젝트에 C++ 파일을 도입해야하는 며칠 전에 문제가 발생했습니다. Java 프로세스의 CPU 사용량을 측정해야 할 필요가 있었으며 JNI를 사용하여 C로 작성된 네이티브 라이브러리 (Unix 시스템의 공유 라이브러리)를 호출하는 방법을 결정했습니다. 문제는 Java 파일들로만 구성된 C 소스 파일을 적절한 저장소 (어쨌든 Clearcase)에 넣는 적절한 장소를 찾으십시오. 두 개 이상의 언어 (Java 및 C++ 등)를 혼합 할 때 소스 코드 구성

내가 대안의 몇 가지 생각 :

의 (a)와 같은 소스베이스의 상단에있는 C 파일 (특히, 하나 개의 .H 파일과 하나 개의 .c 파일) 퍼팅에 대해 별도의 디렉토리를 생성합니다 :

/VOBS/myproduct/javasrc /VOBS/myproduct/cppsrc

나는 두 개의 C 파일이 있으며이 같은 언어 수준에서 소스 기반을 분할하는 것은 매우 이상한 것 같았다 때문에 나는 이것을 좋아하지 않았다

. 프로젝트의 상당 부분이 C++과 Java에서 동일하게 작성 되었다면 괜찮을 것입니다.

(b) C 파일을 사용하는 Java 패키지에 넣으십시오.

나는/vobs/myproduct/com/mycompany/myproduct/util /에 호출 Java 클래스가 있으며 C 파일도 거기에 들어갑니다.

C 파일이 Java 패키지에 속하지 않는다고 생각하기 때문에이 방법이 마음에 들지 않았습니다.

아무도 이런 문제를 해결하지 못했습니까? 일반적으로 두 개 이상의 언어가 혼합 된 코드베이스를 구성 할 때 따라야 할 좋은 전략은 무엇입니까?

업데이트 : 내 프로젝트, 자이 썬에서 C 또는 C++을 사용할 계획이 없습니다.하지만 고객이 C를 사용해서 만 해결할 수있는 기능이 필요하거나 C.

답변

6

"내가 두 개 밖에 없기 때문에 나는 이것을 좋아하지 않았습니다. C 파일과 같은 언어 수준에서 소스 기반을 분할하는 것은 매우 이상한 것 같습니다. "

왜 이상하게 보입니까? 당신은 모듈로 일을 분할하기로 결정한 경우,

 
    project1\src\java 
    project1\src\cpp 
    project1\src\python 

또는 :

 
    project1\module1\src\java 
    project1\module1\src\cpp 
    project1\module2\src\java 
    project1\module2\src\python 

을 나는 개인적인 취향의 문제 같아요,하지만 위의 구조는 매우 일반적이고,이 프로젝트를 고려 한번 익숙해지면 꽤 잘된 것 같아요.

+1

그게 바로 내가있는 곳입니다. 그것은 아주 잘 작동합니다. – Herms

0

개인적으로 나는 두 프로젝트를 별도의 프로젝트로 분리 할 수 ​​있습니다.하지만 두 인스턴스가 같은 클래스에 속하지 않는 것처럼 두 인스턴스가 분리 된 경우도 있습니다. 둘 다 똑같은 개념 영역을 만질 때 많은 모호함을 갖게됩니다. 물론 코드를 빌드 할 때 항상 문제가 있습니다. 예를 들어 구조화에 넣는 것이 가능합니다. 컴파일 할 때 모든 종류의 트릭을 수행 할 필요없이 가능합니다. 프로젝트에서 C를 더 많이 사용하려고 계획하고 있습니까?이 경우 같은 패턴을 따르면 C 파일이 프로젝트 전체에 확산됩니다 ...

0

개인적으로 언어 분리 솔루션의 경우 별도의 프로젝트 또는 폴더에 보관할 것입니다.

문제를 보는 한 가지 방법은 다른 제 3 자 API와 마찬가지로 C 클래스를 처리하는 것입니다. 밀접한 결합을 방지하고 java 소스의 별도 프로젝트/폴더에 C 소스를 유지하려면 Java 코드에서 의존성을 제거합니다 (즉, 직접 호출을 피하십시오).

0

다른 용어를 사용합시다. 프로젝트가 아닌 하나의 제품이 있습니다. 이 제품은 Java 작업 영역과 C/C++ 작업 영역으로 구성되며 각각 다른 IDE에서로드 할 수 있습니다. 결국 하나의 IDE를 사용한다면 하나의 작업 공간 만있을 것입니다. 각 작업 공간은 여러 프로젝트로 구성됩니다. 각 프로젝트에는 자체 폴더 구조 (src, bin, res, e.t.c)가 있습니다. 따라서 하나의 작업 공간 일 경우 하나 이상의 Java 및 C/C++ 프로젝트가 내부에 있고 각기 다른 컴파일/실행/디버그/출력/... 설정을 갖는 것이 좋습니다.

그래서 나는 사용한다 :

Product/Workspace(1)/JavaProject1/src 
Product/Workspace(1)/JavaProject2/src 
Product/Workspace(1 or 2)/CPPproject1/src 
Product/Workspace(1 or 2)/CPPproject2/src ... 

이 방법 당신은 결국 하나 더 일관성 각 프로젝트에 대해 동일한 폴더 구조를 사용할 수 있습니다. 기본적으로 이것은 하나의 추상화 수준에 불과합니다. 즉, 제품을 다른 관련 프로젝트로 나눕니다.

4

웹 앱의 기본 Maven 생성 레이아웃은 src/main/java, src/test/java, src/main/resourcessrc/test/resources입니다. 나는 그것이 src/main/cppsrc/test/cpp을 추가하는 것을 기본이라고 가정 할 것이다. 이것은 나에게 괜찮은 컨벤션처럼 보인다.

+0

+1 메이븐 (Maven) 대회를 채택했습니다. 플라이 글롯 프로젝트에서 저에게 잘 돌아 왔습니다. – mikera

1

별도의 폴더에 보관하는 것이 좋습니다. Java 패키지에서 C 파일을 검색하는 것보다 찾기 쉽고 나중에 나중에 코드를 이동하지 않고도 C 코드를 추가 할 수 있습니다.

0

이 경우 해당 파일은 다른 언어 일뿐만 아니라 정의 된 인터페이스를 통해 상호 작용하는 별도의 프로그램으로 실행됩니다. 즉, 소스 파일을 별도의 프로젝트로 취급 할 수 있으므로 다른 곳에 보관할 수 있습니다.

하나의 코드베이스 내에 C#과 ASP.NET (예 :)을 섞은 .NET 프로젝트의 경우가 다른 경우입니다. 이런 경우 사람들은 어떻게 코드를 구성합니까?