使用gradle进行多项目依赖关系管理

时间:2015-10-18 15:55:41

标签: java android gradle dependency-management

目前有3个项目/ git repos使用gradle设置:

  • app(java,android)
  • 后端(java,spring)
  • client(java,vaadin)

依赖关系:

<!DOCTYPE html>

<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="js/jQueryMobile/jquery.mobile-1.4.5.css">
        <link rel="stylesheet" href="styles.css">
        <script src="js/jQueryMobile/jquery-1.11.3.min.js"></script>
        <script src="js/jQueryMobile/jquery.mobile-1.4.5.js"></script>
        <script src="js/script.js"></script>
    </head>
    
    <body>
        <div data-role="page" id="home">
            <div class="ui-content">
                <div class="img-holder">
                    <img src="img/volcano.jpg" class="image" width="500px">
                    <!--
                    <div class="spot-holder">
                        <a href="#ashcloud" 
                           data-rel="popup" 
                           class="spot ui-btn ui-nodisc-icon ui-btn-icon-notext ui-corner-all"
                           data-transition="flip"
                           style="top: 35px; left: 240px;"></a>
                        <div data-role="popup" id="ashcloud">
                            <p>Ash Cloud</p>
                        </div>
                    </div>
                    -->
                    <div class="spot-holder">
                        <a href="#mainpipe" 
                           data-rel="popup" 
                           class="spot ui-btn ui-nodisc-icon ui-btn-icon-notext ui-corner-all"
                           data-transition="flip"
                           style="top: 250px; left: 232px;"></a>
                        <div data-role="popup" id="mainpipe">
                            <p>Main Pipe</p>
                        </div>
                    </div>
                    <div class="spot-holder">
                        <a href="#sidevent" 
                           data-rel="popup"
                           class="spot ui-btn ui-nodisc-icon ui-btn-icon-notext ui-corner-all"
                           data-transition="flip"
                           style="top: 180px; left: 210px"></a>
                        <div data-role="popup" id="sidevent">
                            <p>Side Vent</p>
                        </div>
                    </div>
                    <div class="spot-holder">
                        <a href="#lavaflow" 
                           data-rel="popup" 
                           class="spot ui-btn ui-nodisc-icon ui-btn-icon-notext ui-corner-all"
                           data-transition="flip"
                           style="top: 120px; left: 215px"></a>
                        <div data-role="popup" id="lavaflow">
                            <p>Lava Flow</p>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>

由于app -> backend client -> backend app并不依赖于client中的所有内容,例如他们不依赖于弹簧等,而是依赖于某些模型类,我需要找到一个好的建设项目的解决方案。

我想到了......

1。 backend神器

  • 2个源文件夹,例如:backendsrc/main/java
  • src/api/java源文件夹编译为jar工件
  • 包含在apiapp

2。扩展sourceSets

  • client添加到backend/src/api/javaapp

3。新的client项目

api

结论

第一个和第二个解决方案不需要第四个git repo,我认为在app -> api client -> api backend -> api 中拥有api组件并不是一个坏主意,但在上下文中我认为,像3中那样对项目依赖进行gradle会更加透明。

任何最佳做法?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

最佳做法是选项3(创建一个新的api项目)。

附注:您不需要为api项目单独创建一个repo,如果需要,可以将其与后端项目一起保存。

编辑:添加回购布局

如果你想在服务器旁边安装api,你会想要这个布局。然后引用像project(":backend:api")

这样的API
.
├── app
│   └── build.gradle
├── backend
│   ├── api
│   │   └── build.gradle
│   └── server
│       └── build.gradle
├── build.gradle
├── client
│   └── build.gradle
└── settings.gradle