gpt4 book ai didi

Java - FatJar 任务创建的 Gradle jar 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:16 27 4
gpt4 key购买 nike

我已经为此寻找解决方案 4 天了,但没有成功,

首先执行正常的 Gradle 构建任务会生成一个很小的 ​​7kB jar 文件,这显然不起作用,然后我为主类添加了 jar 配置:

jar {
manifest {
attributes 'Main-Class': 'Main'
}
}

现在是2MB!

还是不够好,然后我发现了 fatJar/uberJar/shadow 任务,据说是同一件事的同义词,所以我尝试了clean,然后在另一个将在服务器上运行的小型RMI应用程序上尝试了fatJar任务,它运行得很好,将其复制到主应用程序,它生成了60MB jar文件,看起来不错,但由于某种原因无法工作,

该应用程序在我的 IDE (IntelliJIDEA) 中完美运行,但生成的 jar 没有执行任何操作。

所以我的最后一个选择是咨询专家,所以我们开始:

这是clean任务的结果:

6:11:10 PM: Executing external task 'clean'...

:clean

BUILD SUCCESSFUL

Total time: 0.774 secs

6:11:11 PM: External task execution finished 'clean'.

这是 fatJar 任务的结果:

6:13:13 PM: Executing external task 'fatJar'...

Note: Some input files use unchecked or unsafe operations.

Note: Recompile with -Xlint:unchecked for details.

:compileJava

:processResources

:classes

:fatJar

BUILD SUCCESSFUL

Total time: 24.831 secs

6:13:37 PM: External task execution finished 'fatJar'.

这是我的build.gradle文件

group 'Yasmeena'
version '1.0-SNAPSHOT'

apply plugin: 'java'

compileJava.options.encoding = 'UTF-8'

sourceCompatibility = 1.8

jar {
manifest {
attributes 'Main-Class': 'Main'
}
}

task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'Gradle Jar',
'Implementation-Version': version,
'Main-Class': 'Main'
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}

allprojects {
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}

dependencies {

compile 'com.mchange:c3p0:0.9.5.2'
compile 'commons-beanutils:commons-beanutils:1.9.3'
// compile 'org.apache.commons:commons-collections3:2.2-SNAPSHOT'
compile 'commons-digester:commons-digester:2.1'
compile 'commons-logging:commons-logging:1.2'
compile 'commons-validator:commons-validator:1.6'
compile 'org.controlsfx:controlsfx:8.40.13'
compile 'com.jfoenix:jfoenix:1.7.0'
compile 'com.mchange:mchange-commons-java:0.2.11'
compile 'com.github.PlusHaze:TrayNotification:-SNAPSHOT'
compile 'com.google.firebase:firebase-admin:5.3.0'

compile 'org.jetbrains:annotations:15.0'
compile 'org.slf4j:slf4j-simple:1.7.25'

compile group: 'org.postgresql', name: 'postgresql', version: '42.1.4'
compile group: 'com.impossibl.pgjdbc-ng', name: 'pgjdbc-ng', version: '0.6'
compile group: 'org.eclipse.jdt.core.compiler', name: 'ecj', version: '4.6.1'
compile group: 'de.jensd', name: 'fontawesomefx', version: '8.9'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
compile group: 'com.lowagie', name: 'itext', version: '2.1.7'
compile group: 'org.olap4j', name: 'olap4j', version: '1.2.0'

compile fileTree(dir: 'lib', include: 'ReportUtilities.jar')

compile('net.sf.jasperreports:jasperreports:6.4.1') {
exclude group: 'com.itextpdf'
}
runtime 'com.itextpdf:itextpdf:5.5.0'
runtime 'com.itextpdf:itext-pdfa:5.5.0'

testCompile group: 'junit', name: 'junit', version: '4.12'
}

保存我的 main 方法的 Main.java 类直接存在于 ma​​in -> java 目录中

这是我的settings.gradle文件:

rootProject.name = 'Yasmeena'

我的主要方法是启动 JavaFX 应用程序的简单方法:

public static void main(String[] args) {
launch(args);
}

This's my project structure

更新:

build.gradle 文件的当前状态:

group 'Yasmeena'
version '1.0-SNAPSHOT'

apply plugin: 'java'

compileJava.options.encoding = 'UTF-8'

sourceCompatibility = 1.8

jar {
manifest {
attributes 'Main-Class': 'activities.Main'
}
}

allprojects {
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}

dependencies {

compile 'com.mchange:c3p0:0.9.5.2'
compile 'commons-beanutils:commons-beanutils:1.9.3'
compile 'commons-digester:commons-digester:2.1'
compile 'commons-logging:commons-logging:1.2'
compile 'commons-validator:commons-validator:1.6'
compile 'org.controlsfx:controlsfx:8.40.13'
compile 'com.jfoenix:jfoenix:1.7.0'
compile 'com.mchange:mchange-commons-java:0.2.11'
compile 'com.github.PlusHaze:TrayNotification:-SNAPSHOT'
compile 'com.google.firebase:firebase-admin:5.3.0'

compile 'org.jetbrains:annotations:15.0'
compile 'org.slf4j:slf4j-simple:1.7.25'

compile group: 'org.postgresql', name: 'postgresql', version: '42.1.4'
compile group: 'com.impossibl.pgjdbc-ng', name: 'pgjdbc-ng', version: '0.6'
compile group: 'org.eclipse.jdt.core.compiler', name: 'ecj', version: '4.6.1'
compile group: 'de.jensd', name: 'fontawesomefx', version: '8.9'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
compile group: 'com.lowagie', name: 'itext', version: '2.1.7'
compile group: 'org.olap4j', name: 'olap4j', version: '1.2.0'

compile fileTree(dir: 'lib', include: 'ReportUtilities.jar')

compile('net.sf.jasperreports:jasperreports:6.4.1') {
exclude group: 'com.itextpdf'
}
runtime 'com.itextpdf:itextpdf:5.5.0'
runtime 'com.itextpdf:itext-pdfa:5.5.0'

testCompile group: 'junit', name: 'junit', version: '4.12'
}

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'eu.appsatori:gradle-fatjar-plugin:0.3'
}
}

task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'Gradle Jar',
'Implementation-Version': version,
'Main-Class': 'activities.Main',
'Class-Path': ". ${configurations.compile.collect { it.getName() }.join(' ')}"
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}

Current state of project structure

jar 文件内有一个包含 Main.class 文件的 Activity 文件夹

更新:

jar 文件 -> META-INF -> MANIFEST.MF

Manifest-Version: 1.0
Implementation-Title: Gradle Jar
Implementation-Version: 1.0-SNAPSHOT
Class-Path: . ReportUtilities.jar c3p0-0.9.5.2.jar commons-beanutils-1
.9.3.jar commons-digester-2.1.jar commons-logging-1.2.jar commons-val
idator-1.6.jar controlsfx-8.40.13.jar jfoenix-1.7.0.jar mchange-commo
ns-java-0.2.11.jar TrayNotification--SNAPSHOT.jar firebase-admin-5.3.
0.jar annotations-15.0.jar slf4j-simple-1.7.25.jar postgresql-42.1.4.
jar pgjdbc-ng-0.6.jar ecj-4.6.1.jar fontawesomefx-8.9.jar commons-col
lections-3.2.2.jar itext-2.1.7.jar olap4j-1.2.0.jar jasperreports-6.4
.1.jar google-api-client-1.22.0.jar google-api-client-gson-1.22.0.jar
google-http-client-1.22.0.jar json-20160810.jar guava-20.0.jar googl
e-cloud-storage-1.2.1.jar slf4j-api-1.7.25.jar netty-all-4.0.32.Final
.jar bcmail-jdk14-138.jar bcprov-jdk14-138.jar xercesImpl-2.11.0.jar
jcommon-1.0.23.jar jfreechart-1.0.19.jar castor-xml-1.3.3.jar jackson
-core-2.1.4.jar jackson-databind-2.1.4.jar jackson-annotations-2.1.4.
jar lucene-core-4.5.1.jar lucene-analyzers-common-4.5.1.jar lucene-qu
eryparser-4.5.1.jar core-3.2.1.jar icu4j-57.1.jar google-oauth-client
-1.22.0.jar google-http-client-jackson2-1.22.0.jar google-http-client
-gson-1.22.0.jar httpclient-4.0.1.jar google-cloud-core-1.2.1.jar goo
gle-cloud-core-http-1.2.1.jar google-api-services-storage-v1-rev100-1
.22.0.jar castor-core-1.3.3.jar commons-lang-2.6.jar javax.inject-1.j
ar stax-1.2.0.jar stax-api-1.0-2.jar lucene-queries-4.5.1.jar lucene-
sandbox-4.5.1.jar guava-jdk5-17.0.jar httpcore-4.0.1.jar commons-code
c-1.3.jar joda-time-2.9.2.jar api-common-1.1.0.jar gax-1.4.1.jar prot
obuf-java-util-3.3.0.jar proto-google-common-protos-0.1.12.jar proto-
google-iam-v1-0.1.12.jar google-auth-library-credentials-0.7.0.jar go
ogle-auth-library-oauth2-http-0.7.0.jar google-http-client-appengine-
1.21.0.jar google-http-client-jackson-1.21.0.jar stax-api-1.0.1.jar j
akarta-regexp-1.4.jar auto-value-1.2.jar threetenbp-1.3.3.jar protobu
f-java-3.3.0.jar jackson-core-asl-1.9.11.jar bctsp-jdk14-1.38.jar bcp
rov-jdk14-1.38.jar bcmail-jdk14-1.38.jar xml-apis-1.4.01.jar jsr305-3
.0.0.jar gson-2.7.jar
Main-Class: activities.Main

最佳答案

根据这里的评论,这是尝试过的。

  • 确保设置主类
  • 确保主类与定义的类具有相同的完整类名
  • 检查 list 是否有效
  • 检查类是否存在
  • JavaFX 可能需要插件

最后最后一个解决了这个问题this是解决该问题的插件。

这是链中的最后一条评论:

@jrtapsell Well, this's embarrassing but i'v found the problem, i was unaware that JavaFX apps need a special plugin for Gradle, Using the FiberFox Plugin solved my issue, Thanks for your efforts and may you post answers so that i could upvote you if you like

关于Java - FatJar 任务创建的 Gradle jar 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46202486/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com