我正在尝试使用gradle和应用程序插件为我的应用程序创建一个可运行的* .jar文件。
构建以无错误结束,清单文件正常等等,但是当运行* .jar文件时会发生这种情况:
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Coc.Core.StartUpPage"
xmlns:local="clr-namespace:Coc.Core"
Title ="Home">
很明显我错过了这个库,但它被指定:
的build.gradle
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at main.Launcher.<clinit>(Launcher.java:19)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
Exception in thread "main"
Process finished with exit code 1
创建的清单如下:
group 'Comparator'
version '0.9'
apply plugin: 'java'
apply plugin: 'application'
mainClassName = "main.Launcher"
compileJava {
//enable compilation in a separate daemon process
options.fork = true
//enable incremental compilation
options.incremental = true
}
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
// GraphStream Core
compile group: 'org.graphstream', name: 'gs-core', version: '1.3'
// GraphStream
//UI
compile group: 'org.graphstream', name: 'gs-ui', version: '1.3'
// GraphStream
//algo
compile group: 'org.graphstream', name: 'gs-algo', version: '1.3'
// Jena
// https://mvnrepository.com/artifact/org.apache.jena/jena-arq
compile group: 'org.apache.jena', name: 'jena-arq', version: '2.13.0'
compile group: 'org.apache.jena', name: 'jena-querybuilder', version: '2.13.0'
// Log
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.21'
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.0.9'
compile group: 'ch.qos.logback', name: 'logback-core', version: '1.0.9'
// https://mvnrepository.com/artifact/org.jgrapht/jgrapht-core
compile group: 'org.jgrapht', name: 'jgrapht-core', version: '0.9.2'
compile group: 'org.jgrapht', name: 'jgrapht-jdk1.5', version: '0.7.3'
compile group: 'org.jgrapht', name: 'jgrapht-ext', version: '0.9.2'
// CSV parser
compile group: 'com.univocity', name: 'univocity-parsers', version: '1.0.0'
// https://mvnrepository.com/artifact/com.google.guava/guava
compile group: 'com.google.guava', name: 'guava', version: '11.0.2'
}
jar {
manifest {
attributes 'Main-Class': mainClassName,
'Class-Path': configurations.runtime.files.collect { "$it.name" }.join(' ')
}
}
请注意,它确实包含slf4j,但我仍然得到异常。 有什么想法吗?
谢谢!
答案 0 :(得分:0)
过了一段时间,我来到(我认为是)解决方案。这对生成的类路径有不同的依赖关系是个大问题。从头开始生成项目并导入代码和资源证明是一个成功的构建。
如果您遇到相同的错误,我建议使用相同的解决方案,只需从头开始重建项目。
是的,可能有更好的解决方案,但我在1个月内找不到它。
答案 1 :(得分:0)
我认为问题出在导入的库中的定义冲突,这些库也引用了sl4j。使用maven,我必须手动添加指令以将这些引用从其他库中排除。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
<exclusions>
<exclusion>
<artifactId>org.slf4j</artifactId>
<groupId>slf4j-api</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<exclusions>
<exclusion>
<artifactId>org.slf4j</artifactId>
<groupId>slf4j-log4j12</groupId>
</exclusion>
</exclusions>
</dependency>