我的java程序打包在一个jar文件中,并使用外部jar库,bouncy castle.我的代码编译得很好,但是运行jar会导致以下错误:
线程"main"中的异常java.lang.SecurityException:Manifest主要属性的签名文件摘要无效
我用谷歌搜索了一个多小时寻找解释,发现很少有价值.如果有人以前看过这个错误并且可以提供一些帮助,我将不得不承担责任.
到目前为止,我通过Eclipse"Export ..."功能创建了可运行的JAR文件,但现在我切换到IntelliJ IDEA和Gradle进行构建自动化.
这里的一些文章提出了"应用程序"插件,但这并不完全导致我期望的结果(只是一个JAR,没有启动脚本或类似的东西).
如何通过Eclipse"Export ..."对话框实现相同的结果?
在gradle中 - 我如何在lib目录(特别是lib/enttoolkit.jar和lib/mail.jar)中的jar输出jar中嵌入jar?
我正在开发一个Java项目,在这个项目中,我第一次尝试使用Kotlin.我开始使用Intellij Idea中提供的JavaToKoltin转换器将一些类转换为Kotlin.其中我的自定义异常现在转换为Kotlin.但是有了这个,异常处理就不再正常了.
如果我MyCustomKotlinException.kt在java代码中抛出一个自定义异常(例如),则不会捕获异常(请参阅下面的代码).
// Example.java
package foo
import java.util.*;
import java.lang.*;
import java.io.*;
import foo.MyCustomKotlinException;
class Example
{
public static void main (String[] args)
{
try {
// Do some stuff
// if Error
MyCustomKotlinException e = new MyCustomKotlinException("Error Message");
throw e;
} catch (MyCustomKotlinException e) { // <-- THIS PART IS NEVER REACHED
// Handle Exception
} catch (Throwable e) {
e.printStackTrace(); <-- This is catched
} finally {
// Finally ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以任何人都可以向我解释为什么异常不会被捕获.MyCustomKotlinException …
我有一个由Gradle Shadow插件生成的胖/超级JAR .我经常需要通过网络发送胖JAR,因此,方便我只发送文件的delta而不是cca 40 MB的数据.rsync是一个很好的工具.但是,我的源代码中的一个小变化导致最终的胖JAR发生了很大的变化,因此rsync没有尽可能多的帮助.
我可以将胖JAR转换为rsync友好的JAR吗?
我对解决方案/解决方法的想法:
可能相关的问题:
我知道这个问题被问了很多并且有很多答案,但我仍然明白了,我不明白为什么......
我正在尝试.jar从带有gradle的依赖项的projet 生成一个.
我有一个班级src/main/java/Launcher.java,我有自己的main方法.
有我的 build.gradle
plugins {
id 'java'
id 'application'
}
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
mainClassName = 'Launcher'
repositories {
mavenCentral()
}
dependencies {
compile 'commons-io:commons-io:2.1'
compile 'io.vertx:vertx-core:3.4.0'
compile 'io.vertx:vertx-web:3.4.0'
compile 'com.google.code.gson:gson:1.7.2'
compile "com.auth0:java-jwt:3.1.0"
compile 'org.mongodb:mongo-java-driver:3.4.1'
compile 'com.google.guava:guava:24.1-jre'
compile 'commons-io:commons-io:2.6'
}
jar {
manifest {
attributes "Main-Class": mainClassName
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
Run Code Online (Sandbox Code Playgroud)
我$>gradle assemble用来生成我的jar然后$>java -jar path/to/my/.jar
我得到错误"无法找到或加载主类Launcher"...
我不明白为什么,当我查看.jar时,我有Launcher类和META-INF我有我的清单
很抱歉在2018年仍然问这个问题,但是我在想弄清楚什么是错的.我希望somone能得到答案!
这个问题关系到这一个.
我得到了这个Gradle任务:
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'rpi-sense-hat-lib',
'Implementation-Version': version,
'Main-Class': 'io.github.lunarwatcher.pi.sensehat.Tests'
}
baseName = project.name
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
with jar
}
Run Code Online (Sandbox Code Playgroud)
并且只有一个依赖项,将测试依赖项放在一边:
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
testImplementation group: 'junit', name: 'junit', version: '4.12'
}
Run Code Online (Sandbox Code Playgroud)
从IDE运行正常.但是,当我部署到我的Raspberry Pi(或gradlew fatJar在本地使用jar 结果)时,我得到以下异常:
$ java -jar java-sense-hat-1.0a.jar
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at io.github.lunarwatcher.pi.sensehat.UtilsKt.getSenseHat(Utils.kt:18)
at io.github.lunarwatcher.pi.sensehat.SenseHat.<init>(SenseHat.java:12)
at io.github.lunarwatcher.pi.sensehat.Tests.main(Tests.java:9)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) …Run Code Online (Sandbox Code Playgroud) TL; DR我希望将模块的依赖关系构建到其.jar中,但它们似乎不是.
我正在使用Gradle来构建一个项目.我有两个子项目,app(一个Android模块)和tests(一个Java模块),由IntelliJ创建.
由于我想使用app内容中定义的类tests,我添加了适当的依赖项.受到这个答案的启发,我有以下设置:
应用程序/的build.gradle:
...
task jarTask(type: Jar) {
baseName ="${project.archivesBaseName}"
from android.sourceSets.main.java
}
configurations {
jarConfiguration
}
artifacts {
jarConfiguration jarTask
}
Run Code Online (Sandbox Code Playgroud)
测试/的build.gradle
...
dependencies {
...
testCompile project(path: ':app', configuration: 'jarConfiguration')
}
Run Code Online (Sandbox Code Playgroud)
但是,app进口中的一个类org.json.JSONObject.由于这是由Android SDK提供的,app可以很好地找到 - 但是当我尝试运行测试时,我得到(in :tests:compileTestJava)"package org.json不存在".但是,如果我更新tests/build.gradle
...
dependencies {
...
testCompile project(path: ':app', configuration: 'jarConfiguration')
testCompile 'org.json:json:20090211'
}
Run Code Online (Sandbox Code Playgroud)
(见这里)然后测试正确运行.
这不是我所期望的 - 如果.jar没有打包它的依赖项,那么依赖于.jar的任何项目也必须明确地依赖于传递依赖 - 这不会导致依赖关系定义快速增加吗?
使用lucene-core-5.5.2,我在Weblogic服务器中遇到了问题a。独立搜索应用程序可以工作,但是当我作为Web应用程序部署时却失败,并出现以下错误
Exception type is 'java.lang.ExceptionInInitializerError'. Runtime error: java.lang.IllegalArgumentException: An SPI class of type org.apache.lucene.codecs.Codec with name 'Lucene54' does not exist. You need to add the corresponding JAR file supporting this SPI to your classpath. The current classpath supports the following names: []
Run Code Online (Sandbox Code Playgroud)
我试图创造下的文件夹结构,classes/如META-INF/services/添加的所有文件lucene-core-5.5.2.jar META-INF\services\的目录中创建一个jar文件META-INF\services\,并在类路径中添加,但它不承认META-INF/services加载SPI
任何帮助将非常感激。
这个问题已经有了答案:如何将所有依赖项包含在一个 jar 文件中,尽管它是针对 Groovy 的
我正在使用 gradlekotlin-dsl并且代码不兼容。我尝试使用几种方法使其工作,包括:
tasks.withType<Jar> {
configurations["compileClasspath"].forEach { file: File ->
copy {
from(zipTree(file.absoluteFile))
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这不起作用。那么如何kotlin-dsl在 gradle 中包含依赖呢?
我做解密和加密RSA,我用Cipher.getInstance("RSA/NONE/PKCS1Padding");它,我补充说Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());和compile 'org.bouncycastle:bcprov-jdk16:1.45'到 gradle-file。所以这个项目在 Intellij Idea 中运行和工作,
但是如果我生成 .jar 文件并运行它,我有:
java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/PKCS1Padding
at javax.crypto.Cipher.getInstance(Cipher.java:540)
Run Code Online (Sandbox Code Playgroud)
(由 gradle 的 ShadowJar 任务生成的 .jar)。
为什么我在 Intellij Idea 中的项目 - 工作!在 .jar 文件中 - 不起作用?