我遇到了一个问题,前几天,当我已经向大家介绍C ++文件到一个Java项目。 它开始与需要测量的Java进程的CPU占用率,并决定该走的路是使用JNI调用出来用C编写的本机库(在Unix机上的共享库)的问题是找一个合适的地方放C文件源代码库(顺带ClearCase的),它仅包含Java源文件。
我想了几个选择的:
用于使C文件(a)创建一个单独的目录(具体地,一个h文件和一个.c文件)在所述源基站的顶部这样的:
/的VOB / myProduct的/ javasrc /的VOB / myProduct的/ cppsrc
我不喜欢这一点,因为我只有两个C文件,它似乎很奇怪源基地在语言级别这样的分裂。 有项目的主要部分在C ++和Java被写入或多或少同样,这可能是好的。
(二)把C文件到使用它的Java包。
我有调用Java类中/的VOB / myProduct的/ COM / myCompany中/ myProduct的/ UTIL /和C文件还去那里。
我不喜欢这要么是因为我认为C文件只是没有在Java包属于。
有没有人解决过这样的问题吗? 一般情况下,什么是一个好的策略组织代码库混合两种或更多语言时要遵循?
更新:我没有任何打算使用任何C或C ++在我的项目,一些Jython的也许,但你永远不知道什么时候我的客户需要,只能通过用C来解决,或者使用C.最好解决的功能
“我不喜欢这一点,因为我只有两个C文件,它似乎很奇怪源基地在语言级别这样的分裂”
为什么它似乎很奇怪? 考虑这个项目:
project1\src\java
project1\src\cpp
project1\src\python
或者,如果你决定的事情分成模块:
PROJECT1 \模块1的\ src \ java中 PROJECT1 \模块1的\ src \ CPP PROJECT1 \模块2的\ src \ java中 PROJECT1 \模块2的\ src \蟒蛇
我想这是个人喜好的问题,但上述结构是相当普遍的,我觉得它工作得很好,一旦你习惯了它。
对网络应用程序的默认的Maven生成的布局src/main/java
, src/test/java
, src/main/resources
,和src/test/resources
。 我认为它会默认为添加src/main/cpp
和src/test/cpp
为好。 这似乎是一个足够体面的约定给我。
让他们在不同的文件夹是一个好主意。 它可以更容易找到比搜索的C文件Java包,它也允许添加在未来更多的C代码,而不必四处移动以后所有的可能性。
我个人倒分开的两个,甚至可能到自己独立的项目,但是这时候他们都是独立的东西,就像你不会把两个不同的概念在同一个班级。 这是得到很多模糊的时候,他们都接触到了同一概念的区域。 Ofcourse总是有问题,当谈到构建代码,是把它在结构B)可能的,例如无需做各种技巧来得到它来编译? 你打算在项目,在这种情况下,如果你遵循相同的模式的C文件会得到遍布项目中使用多个C ...
在个人的分裂语言解决方案的情况下,我将让他们在单独的项目或文件夹。
看待这个问题的一个方法是像对待其他任何第三方API的C类。 界面了依赖关系在Java代码中(即避免直接调用),以避免紧密耦合,并保持C源程序从Java一个单独的项目/文件夹。
让我们使用不同的术语。 还有一个产品是不是项目。 该产品包括的Java的工作区和C / C ++的工作区中,从不同的IDE每个可加载的。 最后,如果你使用同一个IDE会出现只有一个工作区。 每个工作区由若干个项目。 每个项目都有自己的文件夹结构(SRC,垃圾桶,资源等)。 所以,如果它只是一个工作空间,那么最好是有内部的至少一个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 ...
这样,您就可以使用最后一个相同的文件夹结构,对每一个项目,这是比较一致的。 基本上,这仅仅是一个更抽象的层次 - 将产品以不同的相关项目。
在这种情况下,有问题的文件不只是一个不同的语言,但也运行作为一个单独的程序,通过定义的接口进行交互。 这意味着源文件可以被视为一个单独的项目,并因此保持在别处。
的情况下是在.NET项目其中混合C#和一个基本代码内ASP.NET(例如)不同。 人们如何安排自己的代码,在这种情况下?
文章来源: Organizing the source code base when mixing two or more languages (like Java and C++)