我正在做一个Java项目,在这个项目中,我第一次尝试了Kotlin。我开始使用Intellij Idea中提供的JavaToKoltin转换器将一些类转换为Kotlin。除此之外,我的自定义异常现在已转换为Kotlin。但是,在这种情况下,异常处理不再正常工作
如果我在java代码中抛出一个自定义异常(例如,MyCustomKotlinException.kt
),则不会捕获该异常(请参见下面的代码)。
// 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 ...
}
}
}
谁能给我解释一下为什么异常没有被捕获。MyCustomKotlinExc0019
是从KotlinRuntimeExc0019
继承而来的,这只是java.lang.RuntimeExc0019
的别名。
// MyCustomKotlinException.kt
package foo
class MyCustomKotlinException(err: String) : RuntimeException(err)
更新:
我将抛出部分分成两行(实例创建和抛出),发现问题不在于抛出。try块在实例创建后保留。我创建这个Kotlin类的实例有什么问题吗?
更新2:
我用Throwable
添加了第二个catch块,并捕获了以下Throwable。
java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
...
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
更新3:
将标题更改为更正错误,并修复了将所有项目文件添加到jar的问题(见下面的答案)。将静态编程语言运行库添加到gradle不适合我。
此错误可能是由于简单jar任务没有接受其所有运行时依赖项。
从gradle留档中,在你的build.gradle.kts
中,你可以创建一个"FatJar"任务,也可以将其添加到jar任务中:
tasks.withType<Jar> {
// Otherwise you'll get a "No main manifest attribute" error
manifest {
attributes["Main-Class"] = "com.example.MainKt"
}
// To add all of the dependencies
from(sourceSets.main.get().output)
dependsOn(configurations.runtimeClasspath)
from({
configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }
})
}
将所有项目文件添加到jar解决了这个问题。我在构建中添加了以下行。格雷德尔
jar {
manifest {
attributes ...
}
// This line of code recursively collects and copies all of a project's files
// and adds them to the JAR itself. One can extend this task, to skip certain
// files or particular types at will
from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}
更新:更改了配置。编写收集
到
配置。编译路径。根据下面的答案收集
。
问题内容: 我正在做一个Java项目,在这个项目中,我第一次尝试使用Kotlin。我开始使用Intellij Idea中提供的JavaToKoltin转换器将某些类转换为Kotlin。除其他外,我的自定义例外现在已转换为Kotlin。但是使用此异常处理不再正确。 如果我在Java代码中抛出了一个自定义异常(例如),则不会捕获该异常(请参见下面的代码)。 因此任何人都可以向我解释为什么没有捕获到异常
Java服务端的Web组件(JavaEE)提供动态扩展能力允许你在web容器或者应用服务器中运行你的程序,就像Servlet这个名字的意思,接收客户端的请求返回响应,在MVC架构中充当控制器的角色,Servlet的响应通过视图组件--JSP来渲染,下图展示了一个典型的MVC架构的Java应用。 WAR(web application archive)用来捆绑Web组件、编译生成的class文件以及
im使用的是Liferay7.1,当我想部署SpringMvcPortlet时,我遇到了以下错误: 无法解析配置“:Wars:MySpringMVCPortlet:CompileClasspath”的所有文件。 找不到javax。validation:validation-api:。要求方:project:Wars:SpringMVCPortletFormation找不到org.hibernate
JVM 选项可以通过设置环境变量来更改. 您可以使用 GRADLE_OPTS 或者 JAVA_OPTS. JAVA_OPTS 是一个用于 JAVA 应用的环境变量. 一个典型的用例是在 JAVA_OPTS 里设置HTTP代理服务器(proxy), GRADLE_OPTS 是内存选项. 这些变量可以在 gradle 的一开始就设置或者通过 gradlew 脚本来设置.
问题内容: 在Gradle多项目设置中是否无法在主项目文件夹之外使用外部依赖项? 就像文件中一样 还是必须 始终 将相关项目包含在父项目文件夹中? 问题答案: 假设以下文件系统层次结构: 将以下内容添加到您的中: 和你内心里面的 根据需要重复尽可能多的项目。
我有一个Spring Boot项目,作为一个可执行jar运行,在Linux上作为init.d服务启动。 我知道我可以创建一个与jar文件同名的。conf文件来指定JVM参数。但是,理想情况下,我希望“硬编码”一些参数,这样就不会有.conf文件丢失的风险。这是一个真正的风险,因为每个部署都将因版本号而具有不同的jar名称。 或者,是否有一种方法来硬编码静态CONF文件名?查看embeddedLau