Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FileAlreadyExistsException occures if I setup linux directory soft link for ~/.m2/repository/.meta #3555

Open
MengChaoDeKu opened this issue Mar 7, 2024 · 2 comments

Comments

@MengChaoDeKu
Copy link

MengChaoDeKu commented Mar 7, 2024

Issue tycho version: 4.0.6

In my case, I setup a jenkins task, in the container configuration, I mounted a volume with the default m2 to ~/.m2 to speed up the build speed, since the volume can be used by other instance, so I create a directory soft link for the ~/.m2/repository/.meta:
mkdir -p ~/p2/.meta && ln -s ~/p2/.meta/ ~/.m2/repository/.meta
Then I run the tycho build.
The build worked well until I upgraded the tycho version from 4.0.4 to 4.0.6, now it fails with:

[ERROR] java.nio.file.FileAlreadyExistsException: /home/user/.m2/repository/.meta
java.lang.IllegalStateException: java.nio.file.FileAlreadyExistsException: /home/user/.m2/repository/.meta
    at org.eclipse.tycho.core.locking.FileLockerImpl.<init> (FileLockerImpl.java:48)
    at org.eclipse.tycho.core.locking.FileLockServiceImpl.lambda$getFileLocker$1 (FileLockServiceImpl.java:71)
    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent (ConcurrentHashMap.java:1708)
    at org.eclipse.tycho.core.locking.FileLockServiceImpl.getFileLocker (FileLockServiceImpl.java:71)
    at org.eclipse.tycho.core.locking.FileLockServiceImpl.lock (FileLockServiceImpl.java:39)
    at org.eclipse.tycho.FileLockService.lock (FileLockService.java:32)
    at org.eclipse.tycho.p2.repository.FileBasedTychoRepositoryIndex.save (FileBasedTychoRepositoryIndex.java:109)
    at org.eclipse.tycho.p2.repository.LocalArtifactRepository.save (LocalArtifactRepository.java:127)
    at org.eclipse.tycho.p2resolver.TargetPlatformBaseImpl.saveLocalMavenRepository (TargetPlatformBaseImpl.java:174)
    at org.eclipse.tycho.p2resolver.P2ResolverImpl.toResolutionResult (P2ResolverImpl.java:261)
    at org.eclipse.tycho.p2resolver.P2ResolverImpl.resolveDependencies (P2ResolverImpl.java:246)
    at org.eclipse.tycho.p2resolver.P2ResolverImpl.resolveTargetDependencies (P2ResolverImpl.java:124)
    at org.eclipse.tycho.p2resolver.P2DependencyResolver.doResolveDependencies (P2DependencyResolver.java:378)
    at org.eclipse.tycho.p2resolver.P2DependencyResolver.resolveDependencies (P2DependencyResolver.java:328)
    at org.eclipse.tycho.core.osgitools.AbstractTychoProject.lambda$getDependencyArtifacts$0 (AbstractTychoProject.java:92)
    at org.eclipse.tycho.core.osgitools.DefaultReactorProject$LazyValue.get (DefaultReactorProject.java:307)
    at org.eclipse.tycho.core.osgitools.DefaultReactorProject.computeContextValue (DefaultReactorProject.java:200)
    at org.eclipse.tycho.core.osgitools.AbstractTychoProject.getDependencyArtifacts (AbstractTychoProject.java:82)
    at org.eclipse.tycho.core.resolver.DefaultTychoResolver.resolveProject (DefaultTychoResolver.java:98)
    at org.eclipse.tycho.core.maven.TychoProjectExecutionListener.beforeProjectLifecycleExecution (TychoProjectExecutionListener.java:111)
    at org.apache.maven.lifecycle.internal.CompoundProjectExecutionListener.beforeProjectLifecycleExecution (CompoundProjectExecutionListener.java:42)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:103)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
Caused by: java.nio.file.FileAlreadyExistsException: /home/user/.m2/repository/.meta
    at sun.nio.fs.UnixException.translateToIOException (UnixException.java:94)
    at sun.nio.fs.UnixException.rethrowAsIOException (UnixException.java:106)
    at sun.nio.fs.UnixException.rethrowAsIOException (UnixException.java:111)
    at sun.nio.fs.UnixFileSystemProvider.createDirectory (UnixFileSystemProvider.java:398)
    at java.nio.file.Files.createDirectory (Files.java:700)
    at java.nio.file.Files.createAndCheckIsDirectory (Files.java:807)
    at java.nio.file.Files.createDirectories (Files.java:753)
    at org.eclipse.tycho.core.locking.FileLockerImpl.<init> (FileLockerImpl.java:46)
    at org.eclipse.tycho.core.locking.FileLockServiceImpl.lambda$getFileLocker$1 (FileLockServiceImpl.java:71)
    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent (ConcurrentHashMap.java:1708)
    at org.eclipse.tycho.core.locking.FileLockServiceImpl.getFileLocker (FileLockServiceImpl.java:71)
    at org.eclipse.tycho.core.locking.FileLockServiceImpl.lock (FileLockServiceImpl.java:39)
    at org.eclipse.tycho.FileLockService.lock (FileLockService.java:32)
    at org.eclipse.tycho.p2.repository.FileBasedTychoRepositoryIndex.save (FileBasedTychoRepositoryIndex.java:109)
    at org.eclipse.tycho.p2.repository.LocalArtifactRepository.save (LocalArtifactRepository.java:127)
    at org.eclipse.tycho.p2resolver.TargetPlatformBaseImpl.saveLocalMavenRepository (TargetPlatformBaseImpl.java:174)
    at org.eclipse.tycho.p2resolver.P2ResolverImpl.toResolutionResult (P2ResolverImpl.java:261)
    at org.eclipse.tycho.p2resolver.P2ResolverImpl.resolveDependencies (P2ResolverImpl.java:246)
    at org.eclipse.tycho.p2resolver.P2ResolverImpl.resolveTargetDependencies (P2ResolverImpl.java:124)
    at org.eclipse.tycho.p2resolver.P2DependencyResolver.doResolveDependencies (P2DependencyResolver.java:378)
    at org.eclipse.tycho.p2resolver.P2DependencyResolver.resolveDependencies (P2DependencyResolver.java:328)
    at org.eclipse.tycho.core.osgitools.AbstractTychoProject.lambda$getDependencyArtifacts$0 (AbstractTychoProject.java:92)
    at org.eclipse.tycho.core.osgitools.DefaultReactorProject$LazyValue.get (DefaultReactorProject.java:307)
    at org.eclipse.tycho.core.osgitools.DefaultReactorProject.computeContextValue (DefaultReactorProject.java:200)
    at org.eclipse.tycho.core.osgitools.AbstractTychoProject.getDependencyArtifacts (AbstractTychoProject.java:82)
    at org.eclipse.tycho.core.resolver.DefaultTychoResolver.resolveProject (DefaultTychoResolver.java:98)
    at org.eclipse.tycho.core.maven.TychoProjectExecutionListener.beforeProjectLifecycleExecution (TychoProjectExecutionListener.java:111)
    at org.apache.maven.lifecycle.internal.CompoundProjectExecutionListener.beforeProjectLifecycleExecution (CompoundProjectExecutionListener.java:42)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:103)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
@laeubi
Copy link
Member

laeubi commented Mar 7, 2024

I mounted a volume with the default m2 to ~/.m2 to speed up the build speed, since the volume can be used by other instance,

Sharing the m2 repository across multiple builds is not really supported, if it is also a network device you can have even more issues.

@MengChaoDeKu
Copy link
Author

MengChaoDeKu commented Mar 8, 2024

Hi @laeubi , thanks for your response, I'll re-think about the multiple builds issue on my environment;
Anyway, regarding the FileAlreadyExistsException if user creates soft link for ~/.m2/repository/.meta, the issue can also be reproduced on pure local linux machine, just need to create a soft link for ~/.m2/repository/.meta; is it still a bug to be fixed right?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants