使用Gradle时如何从多模块项目中构建jar?

时间:2018-08-11 22:15:43

标签: gradle build jar dependencies

我正在使用Gradle构建的多模块项目。我在dependencies部分中对此项目的另一个模块有依赖性:

dependencies {
    compile project(':my-other-module')
}

我的问题是我想构建一个.jar文件,该文件仅包含最终文件中的本地模块,而不包含其传递依赖项。我尝试过:

jar {
    from project(':my-other-module').configurations.compile.collect { zipTree it }
}

但是这也添加了所有传递依赖。我想创建一个仅包含我自己的文件的.jar,以便该库的用户可以拥有自己的传递依赖项版本。我该怎么办?

进一步的说明:

我在项目中声明了对apache-commons之类的外部jar的依赖。我希望在生成的.jar文件中不包含这些 ,但我希望库的用户能够将我的库作为依赖项添加,并让Maven / { {1}}下载传递依赖。我不希望在我部署到Maven Central的Gradle文件中将这些可传递依赖项 be .jar不是一个选择,因为我使用的compileOnly这样的依赖项不是由框架或容器提供的。它们需要以apache-commons依赖关系的形式出现。我只想构建并部署一个compile文件,该文件包含我的项目中的所有文件,该文件具有多个模块。

2 个答案:

答案 0 :(得分:0)

Gradle具有compile-only dependency concept,类似于Maven提供的范围:

  

仅编译依赖性与常规编译依赖性明显不同。它们不包含在运行时类路径中,并且是非传递性的,这意味着它们不包含在相关项目中。

不需要的依赖项可以在compileOnly配置中声明,而不是编译,例如:

dependencies { compileOnly 'javax.servlet:servlet-api:2.5' }

默认情况下,

compileOnly甚至对于单元测试也不可见。我们在每个构建中都包含的通用gradle代码段中对此进行了更改:

// compileOnly isn't visible to tests by default, add it
plugins.withType(JavaPlugin).whenPluginAdded {
    sourceSets {
        test.compileClasspath += configurations.compileOnly
        test.runtimeClasspath += configurations.compileOnly
    }
}

对于第二部分,我相信您要为其创建一个“胖”罐, 我建议您使用非常好的Shadow Plugin创建jar,而不是手动扩展jar任务。默认情况下,影子插件在结果jar中的compileOnly配置中将不包含任何内容。

答案 1 :(得分:0)

我不确定它是否会帮助你,但是你可以试试这个。

在您的 build.gradle 文件中,按如下方式自定义您的 jar 任务:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <link href="" rel="styleSheet" type="text/css">
    <title></title>
</head>
<frameset name="ISCmain" rows="35,*" frameborder="1" border="1" resize="yes">
    <frame title="Header mark message" src="" name="header"
        noresize="" scrolling="no" marginwidth="0" marginheight="0">
        <frameset cols="25%,*" resize="yes">
            <frame title="Navigation mark" src="" name="navigation"
                style="border-right: 1px solid #d7d7d7;" resize="yes" marginwidth="10" marginheight="10">
                <html>
                <head>
                </head>
                <body style="direction:ltr" marginwidth="10" marginheight="10" onload="initAll();" class="navtree"
                    leftmargin="0" topmargin="0">
                    <div style="direction:ltr">
                        <link href="" rel="styleSheet" type="text/css">
                        <script language="javascript">
                        </script>
                        <div class="navBody" style="background-color:#FFFFFF;">
                            <table height="26" width="100%" cellspacing="0" cellpadding="0"
                                style="background-color:#FFFFFF;">
                                <tbody>
                                    <tr height="26" style="border-left: 1px solid #3970B1;background-color:#FFFFFF">
                                        <td class="wpsGpFilter" valign="center" align="left" width="100%"
                                            style="background-image:url(/ibm/console/images/isclite/grpfilter_background.gif);background-repeat: repeat-x;">
                                            <select name="navFilterSelection" id="navFilterSelection" dir="ltr"
                                                onchange="determineAction();">
                                                <option value="allTasks" selected="" label=""></option>
                                                <option value="com.ibm.isclite.MyTaskFilter" label=""></option>
                                                <option value="PF+com.ibm.websphere.product" label="">
                                                </option>
                                            </select>
                                            <noscript>
                                                <input type="submit" title='' value=''>
                                            </noscript>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td align="left" colspan="2" class="navtree" style="background-color:#FFFFFF">
                                            <ul class="nav-child" dir="ltr">
                                                <li class="navigation-bullet"><a style="text-decoration:none"
                                                        href="/ibm/console/navigation.do?wpageid=com.ibm.isclite.welcomeportlet.layoutElement.A&amp;moduleRef=com.ibm.isclite.ISCAdminPortlet"
                                                        target="detail" dir="ltr" title=""></a></li>
                                            </ul>
                                            <div nowrap="" class="main-task" style="margin-left:0.3em;"><a
                                                    style="color:#000000;text-decoration:none;"
                                                    href="javascript:expandCollapse('0');" title=""><img
                                                        src="/ibm/console/images/arrow_collapsed.gif" title="Expand"
                                                        alt="Expand" id="I0" border="0" align="absmiddle"></a></div>
                                            <div class="nav-child-container" style="margin-left: 0.3em; display: none;"
                                                id="N0">
                                                <ul class="nav-child" dir="ltr">
                                                    <li class="navigation-bullet"><a style="text-decoration:none"
                                                            href="/ibm/console/navigatorCmd.do?forwardName=guidedactivity.resource&amp;WSC=true"
                                                            target="detail" dir="ltr" title=""></a></li>
                                                </ul>
                                                <ul class="nav-child" dir="ltr">
                                                    <li class="navigation-bullet"><a style="text-decoration:none"
                                                            href="/ibm/console/navigatorCmd.do?forwardName=guidedactivity.web&amp;WSC=true"
                                                            target="detail" dir="ltr" title=""></a></li>
                                                </ul>
                                            </div>
                                            <div nowrap="" class="main-task" style="margin-left:0.3em;"><a
                                                    style="color:#000000;text-decoration:none;"
                                                    href="javascript:expandCollapse('1');" title=""><img
                                                        src="/ibm/console/images/arrow_collapsed.gif" title="Expand"
                                                        alt="Expand" id="I1" border="0" align="absmiddle"></a></div>
                                            <div class="nav-child-container" style="margin-left: 0.3em; display: none;"
                                                id="N1">
                                                <ul class="nav-child" dir="ltr">
                                                    <li class="navigation-bullet"><a style="text-decoration:none"
                                                            href="/ibm/console/navigatorCmd.do?forwardName=ApplicationServer.content.main&amp;WSC=true"
                                                            target="detail" dir="ltr" title=""></a></li>
                                                </ul>
                                                <ul class="nav-child" dir="ltr">
                                                    <li class="navigation-bullet"><a style="text-decoration:none"
                                                            href="/ibm/console/navigatorCmd.do?forwardName=WebServer.content.main&amp;WSC=true"
                                                            target="detail" dir="ltr" title=""></a></li>
                                                </ul>
                                                <ul class="nav-child" dir="ltr">
                                                    <li class="navigation-bullet"><a style="text-decoration:none"
                                                            href="/ibm/console/com.ibm.ws.console.sib.sibresources.forwardCmd.do?forwardName=SIBMQServer.content.main&amp;WSC=true"
                                                            target="detail" dir="ltr" title=""></a>
                                                    </li>
                                                </ul>
                                            </div>
                                            <div nowrap="" class="main-task" style="margin-left:0.3em;"><a
                                                    style="color:#000000;text-decoration:none;"
                                                    href="javascript:expandCollapse('2');" title="Aplications"><img
                                                        src="/ibm/console/images/arrow_expanded.gif" title="Expand"
                                                        alt="Expand" id="I2" border="0"
                                                        align="absmiddle">Aplications</a></div>
                                            <div class="nav-child-container" style="margin-left: 0.3em; display: block;"
                                                id="N2">
                                                <ul class="nav-child" dir="ltr">
                                                    <li class="navigation-bullet"><a style="text-decoration:none"
                                                            href="/ibm/console/navigatorCmd.do?forwardName=ApplicationDeployment.content.main&amp;WSC=true"
                                                            target="detail" dir="ltr" title=""></a>
                                                    </li>
                                                </ul>
                                                <ul class="nav-child" dir="ltr">
                                                    <li class="navigation-bullet"><a style="text-decoration:none"
                                                            href="/ibm/console/com.ibm.ws.console.appmanagement.action.forwardCmd.do?forwardName=appmanagement.upload&amp;WSC=true"
                                                            target="detail" dir="ltr" title=""></a></li>
                                                </ul>
                                            </div>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </body>
                </html>
                <frame title="Content Mark"
                    src="/ibm/console/navigation.do?wpageid=com.ibm.isclite.welcomeportlet.layoutElement.A&amp;moduleRef=com.ibm.isclite.ISCAdminPortlet"
                    name="detail" resize="yes" marginwidth="0" marginheight="0">
        </frameset>
</frameset>
<noframes>
    ...
</noframes>
</html>

在此处检查 from(SourcePaths) 方法的参考: 参考:https://docs.gradle.org/current/dsl/org.gradle.jvm.tasks.Jar.html#org.gradle.jvm.tasks.Jar:from(java.lang.Object[])