gpt4 book ai didi

java - Gradle:路径和 baseDir 都不能为 null 或空字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:20:22 24 4
gpt4 key购买 nike

每次构建时,我都尝试在我的 Gradle 脚本中使用 ProGuard 来混淆我的代码,但是我遇到了以下错误:

FAILURE: Build failed with an exception.

* What went wrong:
Neither path nor baseDir may be null or empty string. path='null' basedir='/Users/hassansyyid/Workspace/Random/Launcher/launcher'

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 1.888 secs

这是我的build.gradle:

import proguard.gradle.ProGuardTask

apply plugin: 'com.github.johnrengelman.shadow'

buildscript {
repositories {
mavenCentral()
}

dependencies {
classpath 'net.sf.proguard:proguard-gradle:5.3.1'
}
}

jar {
manifest {
attributes("Main-Class": "com.skcraft.launcher.Launcher")
}
}

dependencies {
compile 'org.projectlombok:lombok:1.12.2'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.0'
compile 'commons-lang:commons-lang:2.6'
compile 'commons-io:commons-io:1.2'
compile 'com.google.guava:guava:15.0'
compile 'com.beust:jcommander:1.32'
compile 'com.miglayout:miglayout:3.7.4'
compile 'com.google.code.findbugs:jsr305:3.0.0'
}

processResources {
filesMatching('**/*.properties') {
filter {
it.replace('${project.version}', project.version)
}
}
}

task obfuscate(type: proguard.gradle.ProGuardTask) {
configuration 'proguard.txt'

injars "${buildDir}/libs/launcher-${version}.jar"
outjars "${buildDir}/libs/launcher-${version}-obf.jar"

libraryjars configurations.compile.find { it.name.startsWith("lombok") }
libraryjars configurations.compile.find { it.name.startsWith("jackson-databind") }
libraryjars configurations.compile.find { it.name.startsWith("jackson-core") }
libraryjars configurations.compile.find { it.name.startsWith("jackson-annotation") }
libraryjars configurations.compile.find { it.name.startsWith("crypto") }
libraryjars configurations.compile.find { it.name.startsWith("guava") }
libraryjars configurations.compile.find { it.name.startsWith("jcommander") }
libraryjars configurations.compile.find { it.name.startsWith("miglayout") }
libraryjars configurations.compile.find { it.name.startsWith("jsr305") }
libraryjars configurations.compile.find { it.name.startsWith("commons-io") }
libraryjars configurations.compile.find { it.name.startsWith("commons-lang") }
}

shadowJar {
dependencies {
exclude(dependency('org.projectlombok:lombok'))
}
}

build.dependsOn(shadowJar)
build.dependsOn(obfuscate)

关于这个问题,我了解到的唯一信息是它与 obfuscate 任务有关。我通过注释掉 build.dependsOn(obfuscate) 确认了这一点并且构建成功。

我查找了错误,但找不到任何有用的信息。此外,我正在运行最新的 Gradle 版本 Gradle 3.1

我的混淆器.txt:

# Include java runtime classes
-libraryjars <java.home>/lib/rt.jar

# Output a source map file
-printmapping proguard.map

# Keep filenames and line numbers
-keepattributes SourceFile, LineNumberTable

# Disable certain proguard optimizations which remove stackframes (same as Android defaults)
-optimizations !method/inlining/*

-keep public class * {
public protected *;
}

-keepclassmembernames class * {
java.lang.Class class$(java.lang.String);
java.lang.Class class$(java.lang.String, boolean);
}

-keepclasseswithmembernames class * {
native <methods>;
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

在此先感谢您的帮助!

最佳答案

问题似乎是您在 ProGuard 任务中声明库 jar 的方式。根据 the ProGuard homepage 处的文档需要为 libraryjars 设置指定一个文件集合。

Class paths are specified as Gradle file collections, which means they can be specified as simple strings, with files(Object), etc.

我更新了你的 gradle 文件并且能够成功运行构建:

import proguard.gradle.ProGuardTask

apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'java'

buildscript {
repositories {
mavenCentral()
jcenter()
}

dependencies {
classpath group: 'net.sf.proguard', name: 'proguard-gradle', version: '5.3.1'
classpath group: 'com.github.jengelman.gradle.plugins', name: 'shadow', version: '1.2.4'
}
}

repositories {
mavenCentral()
jcenter()
}

jar {
manifest { attributes("Main-Class": "com.skcraft.launcher.Launcher") }
}

dependencies {
compile 'org.projectlombok:lombok:1.12.2'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.0'
compile 'commons-lang:commons-lang:2.6'
compile 'commons-io:commons-io:1.2'
compile 'com.google.guava:guava:15.0'
compile 'com.beust:jcommander:1.32'
compile 'com.miglayout:miglayout:3.7.4'
compile 'com.google.code.findbugs:jsr305:3.0.0'
}

processResources {
filesMatching('**/*.properties') {
filter {
it.replace('${project.version}', project.version)
}
}
}

task obfuscate(type: proguard.gradle.ProGuardTask) {
configuration 'proguard.txt'

injars jar
outjars "${buildDir}/libs/launcher-${version}-obf.jar"

libraryjars files(configurations.compile.collect())
}

shadowJar {
dependencies {
exclude(dependency('org.projectlombok:lombok'))
}
}

build.dependsOn(shadowJar)
build.dependsOn(obfuscate)


task wrapper(type: Wrapper) { gradleVersion = "3.1" }

关于java - Gradle:路径和 baseDir 都不能为 null 或空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40369003/

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