plugin project has several modules, let's name them A and B
A depends on B
B has internal template in its resources dir
then any test in module A which invokes com.intellij.ide.fileTemplates.FileTemplateManager#findInternalTemplate or similar method fails with Duplicate bundled template error.
It seems there are two artifacts (<module>.jar and <module>-base.jar) which are used as a dependency between two project modules which leads to duplicate recourses
Relevant log output or stack trace
Duplicate bundled template template1.txt [(root=jar:file:/Users/Arseniy.Pendryak/Work/intellij-platform-gradle-plugins-bugs/module/build/libs/module-base.jar!/fileTemplates, path=internal/template1.txt.ft), (root=jar:file:/Users/Arseniy.Pendryak/Work/intellij-platform-gradle-plugins-bugs/module/build/libs/module.jar!/fileTemplates, path=internal/template1.txt.ft)]
java.lang.Throwable: Duplicate bundled template template1.txt [(root=jar:file:/Users/Arseniy.Pendryak/Work/intellij-platform-gradle-plugins-bugs/module/build/libs/module-base.jar!/fileTemplates, path=internal/template1.txt.ft), (root=jar:file:/Users/Arseniy.Pendryak/Work/intellij-platform-gradle-plugins-bugs/module/build/libs/module.jar!/fileTemplates, path=internal/template1.txt.ft)]
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:376)
at com.intellij.ide.fileTemplates.impl.FTManager.<init>(FTManager.java:70)
at com.intellij.ide.fileTemplates.impl.FileTemplatesLoaderKt.loadConfiguration(FileTemplatesLoader.kt:170)
at com.intellij.ide.fileTemplates.impl.FileTemplatesLoaderKt.access$loadConfiguration(FileTemplatesLoader.kt:1)
at com.intellij.ide.fileTemplates.impl.FileTemplatesLoader$managers$1.invoke(FileTemplatesLoader.kt:55)
at com.intellij.ide.fileTemplates.impl.FileTemplatesLoader$managers$1.invoke(FileTemplatesLoader.kt:55)
at com.intellij.util.concurrency.SynchronizedClearableLazy._get_value_$lambda$1$lambda$0(SynchronizedClearableLazy.kt:41)
at java.base/java.util.concurrent.atomic.AtomicReference.updateAndGet(AtomicReference.java:210)
at com.intellij.util.concurrency.SynchronizedClearableLazy.getValue(SynchronizedClearableLazy.kt:40)
at com.intellij.ide.fileTemplates.impl.FileTemplatesLoader.getInternalTemplatesManager(FileTemplatesLoader.kt:64)
at com.intellij.ide.fileTemplates.impl.FileTemplateManagerImpl.findInternalTemplate(FileTemplateManagerImpl.java:245)
at com.intellij.ide.fileTemplates.impl.FileTemplateManagerImpl.getInternalTemplate(FileTemplateManagerImpl.java:234)
at org.jetbrains.intellij.platform.example.ExampleTest.simple test(ExampleTest.kt:14)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at com.intellij.testFramework.UsefulTestCase.lambda$wrapTestRunnable$13(UsefulTestCase.java:504)
at com.intellij.testFramework.UsefulTestCase.runTestRunnable(UsefulTestCase.java:408)
at com.intellij.testFramework.fixtures.BasePlatformTestCase.runTestRunnable(BasePlatformTestCase.java:109)
at com.intellij.testFramework.UsefulTestCase.defaultRunBare(UsefulTestCase.java:424)
at com.intellij.testFramework.UsefulTestCase.lambda$runBare$12(UsefulTestCase.java:491)
at com.intellij.testFramework.EdtTestUtil.lambda$runInEdtAndWait$3(EdtTestUtil.java:80)
at com.intellij.openapi.application.impl.RwLockHolder.runWriteIntentReadAction(RwLockHolder.kt:70)
at com.intellij.testFramework.EdtTestUtil.lambda$runInEdtAndWait$4(EdtTestUtil.java:79)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:308)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:792)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:739)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:733)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:761)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:326)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)
What happened?
If:
A
andB
A
depends onB
B
has internal template in itsresources
dirthen any test in module
A
which invokescom.intellij.ide.fileTemplates.FileTemplateManager#findInternalTemplate
or similar method fails withDuplicate bundled template
error. It seems there are two artifacts (<module>.jar
and<module>-base.jar
) which are used as a dependency between two project modules which leads to duplicate recoursesRelevant log output or stack trace
Steps to reproduce
Use https://github.com/Undin/intellij-platform-gradle-plugins-bugs/tree/duplicate-template-files-in-tests and try to run
org.jetbrains.intellij.platform.example.ExampleTest#simple test
Gradle IntelliJ Plugin version
2.0.0-beta5
Gradle version
8.7
Operating System
macOS
Link to build, i.e. failing GitHub Action job
No response