首页 文章

Gradle包括战争中另一个项目 生产环境 的jar

提问于
浏览
2

目前我有两个使用gradle build.gradle的项目 . 第一个是创建一个胖jar文件,我想将其包含在war文件中 . 我认为编译它就足够了,但它似乎并没有在我的war文件的/ lib目录中结束 . 任何人都有想法我很陌生 .

dependencies {
    compile project(':JarProject')
    providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
    providedCompile 'org.apache.tomcat:tomcat-jsp-api:7.0.55'

}


war {
    archiveName 'WarProject.war'
    from 'JarProject/build/libs'
    webXml = file('src/web.xml')
}

第二个项目战是否需要在提供的运行时间?或者我应该从本地maven仓库中的其他项目发布jar并以这种方式包含它?

2 回答

  • 0

    War任务本质上就像一个关于它在战争中打包的东西的CopyTask,所以documentation on working with files很有用 . 从本质上讲,我认为你需要像(未经测试的):

    from fileTree('JarProject/build/libs') {
        into("lib")
    }
    

    话虽这么说,使用 mavenLocal() 并在那里发布也有效,但是当战争包含一些来自本地的旧版本时,它会导致意想不到的结果,从上面的文件系统中明确地拾取jar更好 .

    我认为优雅的解决方案是使用multi project buildsproject level dependencies . 您可以将两个构建作为相同Gradle构建的单独项目,并将"jar project"添加为常规 compile 依赖项 .

  • 2

    你是如何宣布依赖的?我假设您有一个包含子项目A和B的多项目构建,两者都使用War插件 . 我使用Gradle 2.4进行了实验,如果我像这样声明B / build.gradle:

    apply plugin: 'war'
    
    dependencies {
        compile project(':A')
    }
    

    然后B.war包含WEB-INF / lib / A.jar . 如果您正确遵循Gradle War插件的惯例(将Web资源放在A / src / main / webapp /和A / src / main / resources /中的代码相关资源),那么A.jar应包含您想要的内容 .

    this

相关问题