Java 科特林+;Gradle runnable jar-依赖性导致;无法找到或加载主类“;
渐变生成文件:Java 科特林+;Gradle runnable jar-依赖性导致;无法找到或加载主类“;,java,gradle,kotlin,Java,Gradle,Kotlin,渐变生成文件: buildscript { ext.kotlin_version = '1.2.41' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } group 'com.anivive' version '0.1' appl
buildscript {
ext.kotlin_version = '1.2.41'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
group 'com.anivive'
version '0.1'
apply plugin: 'kotlin'
sourceSets {
main.java.srcDirs += 'src/main/kotlin/'
test.java.srcDirs += 'src/test/kotlin/'
}
repositories {
mavenLocal()
maven {
url "https://packagecloud.io/anivive/anivive/maven2"
}
mavenCentral()
}
dependencies {
compile 'anivive:Import_Utils:1.2.44'
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
jar {
baseName = 'XMLModelBuilder'
version = '0.1'
manifest {
attributes 'Main-Class': 'com.anivive.Main'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
文件结构:
src
- main
- kotlin
- com
- anivive
- Main.kt
Main.kt:
package com.anivive
import com.anivive.util.ExampleClass
object Main {
@JvmStatic
fun main(args: Array<String>) {
ExampleClass.exampleMethod()
}
}
package com.anivive
导入com.anivive.util.ExampleClass
对象主体{
@JvmStatic
趣味主线(args:Array){
ExampleClass.exampleMethod()
}
}
因此,我试图构建一个可运行的jar文件,该文件将从依赖项“anivive:Import_Utils:1.2.44”中的类调用单个方法
如果我删除依赖项,并将main方法更改为justprintln(“Test”)
,jar将通过java-jarbuild/libs/jarFile.jar运行良好,并将打印出Test
但是,在包含依赖项的情况下,当尝试从依赖项调用函数时,每当我尝试运行Jar文件时,都会出现错误:找不到或加载主类com.anivive.main
。我怀疑这与在packagecloud上托管jar文件有关,但我很惊讶这是一个问题,因为我可以在IntelliJ上运行这个程序
有什么问题?这里也有同样的问题。我已经检查了jar文件中的实际路径,它们是正确的。它就是找不到类,这让我觉得类路径是错误的。我正在为gradle使用Kotlin DSL@对不起,我从来没有解决过这个问题。我最终放弃了。我使用了gradle的应用程序
插件,该插件在build\distributions
中创建了一个名为distribution的捆绑包,该捆绑包被正确打包,以便提供所有依赖项,并且在打包的bin
文件夹中有两个脚本,一个用于Windows,一个用于*nixes,可用于从命令行启动应用程序。相当整洁!它甚至会让您感到不安,因为您只需要将add./build/distributions/packagename-0.1.tar”/app
添加到Dockerfile
。我无法在上一条评论中写入更多文本,但Dockerfile
中的add
行会自动将tarball提取到指定的容器路径。