Přizpůsobit se Projevují ve Válce úkol

0

Otázka

Potřebuju upravit soubor Manifestu při montáži VÁLCE souboru. Musím se přidat seznam všech souborů na class path, aby se zabránilo java.io.IOException: CreateProcess error=206, The filename or extension is too long výjimkou je vyvolána, když je chci spustit to java soubor na počítači s Windows.

Prohlásil přímo v build skriptu tento úkol dělá práci.

task pathingWar(type: War) {
  getArchiveAppendix().set("pathing")
  doFirst {
    manifest {
      attributes "Class-Path": sourceSets.main.runtimeClasspath.files.collect { project.uri(it) }.join(" ")
    }
  }
}

Nicméně jsem chtěl vytvořit samostatný úkol v buildSrc adresáře jako v kódu níže. Válka je vytvořena s tras dodatek v názvu, ale není tam žádný další Class-Path majetek uvnitř MANIFEST.MF soubor, i když classpathFiles proměnná obsahuje požadované hodnoty při ladění na provedení úkolu.

class PathingWar extends War {

   PathingWar() {
    getArchiveAppendix().set("pathing")
  }

  @TaskAction
  def setManifestTask() {
    def classpathFiles = ((SourceSet)((SourceSetContainer) getProject().getExtensions().getByName("sourceSets"))
            .getByName("main")).getRuntimeClasspath().getFiles().collect {project.uri(it)}.join(" ")
    setManifest(getManifest().attributes(["Class-Path": classpathFiles]))
  }
}

Atributy nechce být nastavena na seznam, co jsem vynechal při překladu logické z build skript pro vlastní úkol?

Aktualizace

Po další kontrole jsem vidět, že když setManifestTask() komentovaný s @TaskAction je popraven, je již příliš pozdě. V tomto bodě války je generován pod build/libs složky. Potřebuju další způsob konfigurace projeví. Nevím, který jiný přístup k použití.

gradle java
2021-11-22 21:50:43
1

Nejlepší odpověď

0

Snažil jsem se nastavit manifest Class-Path atributu v doFirst{} blok tak, že by bylo nastavit jako první akce a podobně jako v původním skriptu, bez úspěchu. Stále jar byl vytvořen před uzavřením v doFirst byl popraven.

Poté, co jsem četl následující odpověď https://stackoverflow.com/a/16413207/978302 Pochopil jsem, že bych neměl být převažující funkce Válečný úkol. Místo toho se musím nakonfigurovat jej s dostupnými vstupy a výsledek bude generován v zákulisí.

Konečné řešení neobsahuje žádné akce definována. Jen další konfiguraci:

  • archivaAppendix
  • manifest

Zadání:

class PathingWar extends War {

  PathingWar() {
    getArchiveAppendix().set("pathing")
    manifest {
      def classpathFiles = ((SourceSet) ((SourceSetContainer) getProject().getExtensions().getByName("sourceSets"))
              .getByName("main")).getRuntimeClasspath().getFiles().collect { project.uri(it) }.join(" ")
      attributes "Class-Path": classpathFiles
    }
  }
}

BTW: stále nechápu, proč úkol definované ve skriptu funguje, jak se očekávalo.

2021-11-23 10:39:17

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................