diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/instructions/JarBasedArtifactRootDescriptor.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/instructions/JarBasedArtifactRootDescriptor.java index a75d66485577..8c3f762238a0 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/instructions/JarBasedArtifactRootDescriptor.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/instructions/JarBasedArtifactRootDescriptor.java @@ -50,6 +50,8 @@ public class JarBasedArtifactRootDescriptor extends ArtifactRootDescriptor { } public void processEntries(EntryProcessor processor) throws IOException { + if (!myRoot.isFile()) return; + String prefix = StringUtil.trimStart(myPathInJar, "/"); if (!StringUtil.endsWithChar(prefix, '/')) prefix += "/"; if (prefix.equals("/")) { diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTest.java b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTest.java index 9179999c9000..10ea2438517c 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTest.java +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTest.java @@ -405,6 +405,18 @@ public class ArtifactBuilderTest extends ArtifactBuilderTestCase { assertEmptyOutput(a); } + public void testExtractNonExistentJarFile() { + JpsArtifact a = addArtifact(root().extractedDir("this-file-does-not-exist.jar", "/")); + buildAll(); + assertEmptyOutput(a); + } + + public void testRepackNonExistentJarFile() { + JpsArtifact a = addArtifact(archive("a.jar").extractedDir("this-file-does-not-exist.jar", "/").fileCopy(createFile("a.txt"))); + buildAll(); + assertOutput(a, fs().archive("a.jar").file("a.txt")); + } + private static void createFileInArtifactOutput(JpsArtifact a, final String fileName) throws IOException { assertTrue(new File(a.getOutputPath(), fileName).createNewFile()); }