【问题标题】:Gradle FatJar task creating multiple MANIFEST.MF filesGradle FatJar 任务创建多个 MANIFEST.MF 文件
【发布时间】:2015-11-03 02:02:09
【问题描述】:

当我运行这个 FatJar/UberJar 任务时,我最终得到一个 .jar 文件,其 META-INF\ 文件夹包含两个 MANIFEST.MF 文件。一个是我在任务定义中插入属性的正确的,另一个只包含“Manifest-Version:1.0”。 这会在尝试运行应用程序时导致“无法找到或加载主类”错误(我假设它只读取第一个并且无法识别主类)

task fatJar(type: Jar) {
baseName = project.name

manifest {
    attributes 'Implementation-Title': 'Synchronizer',
               'Main-Class': 'net.xxx.yyy.Main'
}     
     from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
     with jar 
}

MANIFEST.MF #1
清单版本:1.0

MANIFEST.MF #2:
清单版本:1.0
实现-标题:同步器
主类:net.xxx.yyy.Main

Manifest 重复的原因是什么?
我尝试使用

排除 MANIFEST.MF
it.isDirectory() ? it : zipTree(it).matching{exclude{it.path.contains == 'META-INF'}}  
it.isDirectory() ? it : zipTree(it).matching{exclude{it.name.contains == 'MANIFEST'}}

*** 这些确实排除了子 JAR META-INF 文件夹和清单文件,所以我不确定 MANIFEST.MF #1 来自哪里。这似乎是默认值?

【问题讨论】:

    标签: java jar


    【解决方案1】:

    在我的 gradle 版本中,我没有使用您的代码获得 2 个清单 - 我最终只得到一个包含 Manifest-Version: 1.0 的清单,如您所述。

    问题似乎是您的清单闭包实际上并未与 jar 闭包相关联。 Jar 任务类型分配和“with jar”关键字不会为您执行此操作。因此,它不会被识别为 jar 任务的清单文件。您应该能够通过以下选项之一解决此问题:

    task fatJar(type: Jar) {
        baseName = project.name
    
        jar.manifest {
            attributes 'Implementation-Title': 'Synchronizer',
                   'Main-Class': 'net.xxx.yyy.Main'
        }     
        from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } with jar
    }
    

    或者,一种更简洁的编写方式是在 jar 闭包中包含清单和 from 闭包:

    task fatJar(type: Jar) {
        baseName = project.name
        
        jar{
            manifest {
                attributes 'Implementation-Title': 'Synchronizer',
                       'Main-Class': 'net.xxx.yyy.Main'
            }     
            from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多