Gradle从包含的jar清单中提取依赖项

时间:2019-03-19 13:56:32

标签: gradle jar manifest.mf

我在本地安装了weblogic 10.3.6。我通常在我的Eclipse项目的类路径中添加wlserver_10.3\server\lib\weblogic.jar,它将所有其他weblogic运行时jar从weblogic.jar的MANIFEST.MF文件带到类路径。

查看显示MANIFEST.MF内容的图像。 content of MANIFEST.MF

当我将weblogic jar添加为平面目录依赖项时,我的问题是gradle项目。

weblogic.jar gradle dependency

它仅将weblogic.jar拉到类路径,但不尊重它的MANIFEST.MF,并且不带所有其他jar。

gradle是否有任何标准方法可从包含的jar的MANIFEST.MF中提取依赖项?

1 个答案:

答案 0 :(得分:0)

没有标准方法,但是可以应用解决方法。您可以定义一个方法,该方法读取weblogic.jar清单文件的类路径并返回可在依赖项中使用的文件列表。

// Method to return files mentioned in manifest file
import java.util.jar.Attributes;
def getWeblogicDependencyFiles() {

    def fileList = []
    def weblogicJarDir = '/path/to/webLogic/folder/10.3.6/wlserver_10.3/server/lib'
    def classPathJars = new java.util.jar.JarFile(weblogicJarDir+'/weblogic.jar').manifest.mainAttributes.get(Attributes.Name.CLASS_PATH).split(' ')
    for(String jarName : classPathJars) {
        if("".equals(jarName.trim())) {
            continue;
        }
        fileList.add(file(weblogicJarDir+'/'+jarName))
    }

    return fileList
}

下一步,将此方法的输出分配给变量

// Make te output available to project
project.ext.weblogicDependencyFiles = getWeblogicDependencyFiles();

现在您可以将这些文件用作项目中的依赖项

// Dependency
dependencies {
    compile files(weblogicDependencyFiles)
}

同样,这只是一种解决方法。更好的方法是从中央存储库定义依赖项。