Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构建允许在不同二进制文件之间共享模块的系统_Java_Maven 2_Build_Buildr - Fatal编程技术网

Java 构建允许在不同二进制文件之间共享模块的系统

Java 构建允许在不同二进制文件之间共享模块的系统,java,maven-2,build,buildr,Java,Maven 2,Build,Buildr,我正试图选择最合适的构建系统,以便在具有公共源代码库的企业中工作,强调共享公共代码。我希望源层次结构如下所示: - src - java - common - net - database - team1 - team2 - team3 - lib - tests - java - common - net - database - team1

我正试图选择最合适的构建系统,以便在具有公共源代码库的企业中工作,强调共享公共代码。我希望源层次结构如下所示:

- src - java - common - net - database - team1 - team2 - team3 - lib - tests - java - common - net - database - team1 - team2 - team3 - lib
project
    module-1
        src
            main
                ....
            test
                ....
        pom.xml
    module-2
        src
            main
                ....
            test
                ....
        pom.xml
    ...
    pom.xml
-src -爪哇 -普通的 -网 -数据库 -第1组 -第二组 -第三小组 -解放党 -测验 -爪哇 -普通的 -网 -数据库 -第1组 -第二组 -第三小组 -解放党 目标是建立一个构建系统,其中团队[1-3]可以拥有明确指定其依赖关系的独立构建。依赖项可能如下所示:

- team1 - common/net - team3/lib - team2 - common/database - team3 -第1组 -公共/网络 -团队3/lib -第二组 -公共/数据库 -第三小组 例如,team1的构建将包括team1、common/net和team3/lib中的所有内容;但没有别的。理想情况下,测试将以相同的方式集成(测试团队1将为团队1、common/net和团队3/lib运行测试)

我目前正在使用Ant,但还没有找到一种合理的方法来管理这样的层次结构。我开始研究Maven 2管理依赖层次结构的能力,但它似乎希望每个模块都有成熟的项目。这不会是一个问题,但它似乎迫使我进入一个与传统java包层次结构不匹配的目录结构。看起来我可能可以使用一个新的构建器来做我想做的事情,但我担心这可能会被证明是脆弱的


有人能推荐一些对我有用的吗?

正如你所说,Maven 2是你的首选。 Maven文件夹结构不是疯狂的-它是可配置的,如果你认为它是不可分割的。然而,我认为这是一个很好的结构,你可以毫无悔意地遵循它

您可以使用,这样使用某些依赖项的人就不必签出他们所依赖的项目

我目前正在使用Ant,但还没有找到一种合理的方法来管理这样的层次结构

这是令人惊讶的,因为Ant(+Ivy?)为您提供了所需的所有灵活性

我开始研究Maven 2管理依赖层次结构的能力,但它似乎希望每个模块都有成熟的项目

如果您的意思是每个模块一个
pom.xml
,那么这是正确的

这不会是一个问题,但它似乎迫使我进入一个与传统java包层次结构不匹配的目录结构

是的,Maven附带了一些约定,项目目录结构就是其中之一。虽然这是(有点)可配置的,但我认为您无法匹配所需的布局(将测试和源划分为单独的层次结构)。事实上,我强烈建议使用默认值如果你选择Maven,你应该采用它的理念,它将为你节省很多,真的很多痛苦(甚至没有提到一些插件可能以硬编码的方式使用这些默认值)

老实说,我真的不明白您所说的目录结构与传统java包层次结构不匹配是什么意思。首先,Maven非常适合Java,所以这对我来说没有任何意义。第二,这可能更加主观,您的布局(带有分离的测试和源代码树)在我看来一点也不传统。也许你应该澄清一下你所说的“传统”到底是什么意思

看起来我可能可以使用一种替代的布局来使用buildr做我想做的事情,但我担心这可能会被证明是脆弱的

我对buildr不太了解,所以我不能对它说太多,但我知道它确实更灵活。也就是说,如果Ant在灵活性方面不能给您带来满足,那么我不明白为什么buildr会更好

别忘了buildr和Ant+Ivy的社区比Maven小得多。不要低估这一点,这可能会成为一个真正的问题

就我个人而言,我会选择Maven,重新考虑你的布局。但是我有偏见

我开始研究Maven 2管理依赖层次结构的能力,但它似乎希望每个模块都有成熟的项目

这是一种方法。或者,多模块Maven项目可以这样组织:

- src - java - common - net - database - team1 - team2 - team3 - lib - tests - java - common - net - database - team1 - team2 - team3 - lib
project
    module-1
        src
            main
                ....
            test
                ....
        pom.xml
    module-2
        src
            main
                ....
            test
                ....
        pom.xml
    ...
    pom.xml

其中,每个pom.xml还可以引用由其他树定义的模块。顺便说一句,EclipseMaven插件支持这种方法以及更常见的每个项目一个模块的方法。

从长远来看,您的目标将给您带来很多麻烦。。。每个独立组件都应该使用自己的存储库构建到自己的项目中,否则,您可能会遇到很多问题,其中一个组件的更改会破坏其他组件,并且更新时间过长。我强烈建议您将每个组件制作成自己的项目,并使用Maven2进行构建。

我认为您实际上有三个问题

  • 如何布局您的项目,使工件有意义
  • 如何为每个项目最好地处理这些工件的共享
  • 如何在转换开发团队以使用新的项目结构时处理生产力的损失
对于第一个问题,尽可能使用Maven约定,并将项目组织成多个工件。如果工件应该嵌套在父对象下,那么就这样做。从最简单的工件开始,它没有依赖项,然后按照自己的方式完成代码

我不知道为什么您认为布局不支持传统的Java层次结构?它应该会起作用,尤其是如果您使用父POM

显然,第二个问题可能会变得相当棘手,这取决于您如何处理第一个问题。我会错误地创建更多的工件,而不是更少的工件,并使用Nexus或Artifactory之类的存储库管理器来管理它们。至少这样,您团队的构建可以依赖于hit预先构建和测试的JAR