From 1d0e313f051f21003ba8e2fb792441242660c0ca Mon Sep 17 00:00:00 2001 From: Marc Hermans Date: Thu, 16 May 2024 21:35:11 +0200 Subject: [PATCH] Only allow directories, jars and zips on the lcp. Closes: #144 --- .../neoforged/gradle/userdev/RunTests.groovy | 51 +++++++++++++++++++ .../runtime/tasks/ClasspathSerializer.java | 10 +++- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/RunTests.groovy b/userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/RunTests.groovy index 987f3c66a..823c8620d 100644 --- a/userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/RunTests.groovy +++ b/userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/RunTests.groovy @@ -48,6 +48,57 @@ class RunTests extends BuilderBasedTestSpecification { run.output.contains('runClient') } + def "when referencing pom on run classpath, it should not list it on the LCP, but it should list its dependencies"() { + given: + def project = create("runs_support_poms", { + it.build(""" + java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } + } + + repositories { + mavenCentral() + } + + dependencies { + implementation 'net.neoforged:neoforge:+' + } + + runs { + client { + dependencies { + runtime 'org.graalvm.polyglot:python:23.1.2' + } + + modSource project.sourceSets.main + } + } + """) + it.withToolchains() + }) + + when: + def run = project.run { + it.tasks(':writeMinecraftClasspathClient') + } + + then: + run.task(':writeMinecraftClasspathClient').outcome == TaskOutcome.SUCCESS + + def neoformDir = run.file(".gradle/configuration/neoForm") + def versionedNeoformDir = neoformDir.listFiles()[0] + def stepsDir = new File(versionedNeoformDir, "steps") + def stepDir = new File(stepsDir, "writeMinecraftClasspathClient") + def classpathFile = new File(stepDir, "classpath.txt") + + classpathFile.exists() + + classpathFile.text.contains("org.graalvm.polyglot/polyglot") + !classpathFile.text.contains(".pom") + } + def "userdev supports custom run dependencies"() { given: def project = create("run_with_custom_dependencies", { diff --git a/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/tasks/ClasspathSerializer.java b/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/tasks/ClasspathSerializer.java index 622c97a7a..ed55fa3a0 100644 --- a/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/tasks/ClasspathSerializer.java +++ b/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/tasks/ClasspathSerializer.java @@ -25,7 +25,15 @@ public void run() throws Exception { final File out = ensureFileWorkspaceReady(getOutput()); Files.write( out.toPath(), - getInputFiles().getFiles().stream() + getInputFiles() + .getAsFileTree() + //Filter out valid classpath elements, this can put .pom files in the input files, so we need to remove those. + .matching(filter -> { + filter.include(fileTreeElement -> fileTreeElement.isDirectory() || + fileTreeElement.getName().endsWith(".jar") || + fileTreeElement.getName().endsWith(".zip")); + }) + .getFiles().stream() .map(File::getAbsolutePath) .sorted() .collect(Collectors.toCollection(LinkedHashSet::new)),