第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

是否可以換出JavaExecAction Gradle用于運(yùn)行Java?

是否可以換出JavaExecAction Gradle用于運(yùn)行Java?

狐的傳說(shuō) 2021-05-05 13:34:56
當(dāng)類路徑太長(zhǎng)時(shí),Java無(wú)法啟動(dòng)。在Windows上,長(zhǎng)度限制特別短。Gradle似乎對(duì)解決這個(gè)問(wèn)題不感興趣(盡管這是他們的責(zé)任,因?yàn)樗麄兪荍ava的開發(fā)者),所以我們最終JavaExec用自己的替代方法代替了任務(wù)。替代方法如下所示:public class WorkingJavaExec extends JavaExec {    private static final String MATCH_CHUNKS_OF_70_CHARACTERS =        "(?<=\\G.{70})";    private final Logger logger = LoggerFactory.getLogger(getClass());    @Override    public void exec() {        FileCollection oldClasspath = getClasspath();        File jarFile = null;        try {            if (!oldClasspath.isEmpty()) {                try {                    jarFile =                        toJarWithClasspath(oldClasspath.getFiles());                    setClasspath(getProject().files(jarFile));                } catch (IOException e) {                    throw new UncheckedIOException(e);                }            }            super.exec();        } finally {            setClasspath(oldClasspath);            if (jarFile != null) {                try {                    Files.delete(jarFile.toPath());                } catch (Exception e) {                    logger.warn("Couldn't delete: " + jarFile, e);                }            }        }    }    public static File toJarWithClasspath(Set<File> files)            throws IOException {        File jarFile = File.createTempFile("long-classpath", ".jar");        try (ZipOutputStream zip =                new ZipOutputStream(new FileOutputStream(jarFile))) {            zip.putNextEntry(new ZipEntry("META-INF/MANIFEST.MF"));            try (PrintWriter writer =                    new PrintWriter(                        new OutputStreamWriter(                            zip, StandardCharsets.UTF_8))) {                writer.println("Manifest-Version: 1.0");但是,使用它很麻煩,因?yàn)榈教幎加腥丝赡芘軄?lái)跑去JavaExec,我必須將其替換為WorkingJavaExec。新開發(fā)人員首先也不知道Gradle中存在這種陷阱,因此他們甚至不知道這是他們必須解決的問(wèn)題。在閱讀Gradle的內(nèi)部知識(shí)時(shí),我看到JavaExec內(nèi)部使用aJavaExecAction來(lái)執(zhí)行實(shí)際的exec。我認(rèn)為也許可以通過(guò)替換它來(lái)解決問(wèn)題,就像Gradle自己解決了該問(wèn)題一樣,也許它也可以應(yīng)用于其他任務(wù),例如Test。但是我在任何地方都找不到任何示例。(即使在其他大型項(xiàng)目中,您也希望遇到同樣的問(wèn)題?。┦欠窨梢蕴娲鶭avaExecAction,如果可以,如何替代?
查看完整描述

2 回答

?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以使用該jar任務(wù)為您的清單添加類路徑:


jar {

    baseName = "my-app"

    version =  "1.0.0"

    manifest {

        attributes("Class-Path": configurations.compile.collect { it.getName() }.join(' '))

    }

}

然后,您可以在啟動(dòng)時(shí)引用該jar:


task run(type:JavaExec) {

    classpath = jar.outputs.files

    main = "myapp.MainClass"

}

這可以解決命令行路徑限制。您可能還希望將依賴關(guān)系JAR復(fù)制到輸出文件夾,以便它們?cè)谶\(yùn)行時(shí)可用。


task copyDependencies(type: Copy, dependsOn: [ "build" ]) {

   from configurations.runtime

   into "./build/libs"

}


build.finalizedBy(copyDependencies)

有幫助嗎?


查看完整回答
反對(duì) 回復(fù) 2021-05-19
  • 2 回答
  • 0 關(guān)注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)