ClassDefNotFoundError on resource package scanning corrupts stacks
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 85
- Forks
- 26
- Avg merge
- 11h 49m
- Merged PRs (30d)
- 22
Description
What happened?
Here is a stack trace we got:
java.lang.IllegalStateException: Failed to load class 'reactor.core.publisher.ContextPropagation$ReactorScopeImpl' (package: 'reactor.core.publisher') from class path: io/micrometer/context/ContextSnapshot$Scope
The code that throws this error is here
And the usage is here.
The issue is that depending on where the failure happens, it can cause resources to be deleted which should not be and leaves the stack in a corrupted state.
I tried to work around this by using event handlers in the UpdateOptions but this appears to occur before the preludeEvent.
Also, the log handlers onStandardOutput and onStandardError do not catch this as it is thrown by DeploymentImpl:
2025-07-17T19:51:56.407-0700 ERROR ForkJoinPool.commonPool-worker-6 com.pulumi.deployment.internal.DeploymentImpl Running program [PID: 78011] ... failed with an unhandled exception:
java.lang.IllegalStateException: Failed to load class 'org.flywaydb.core.internal.scanner.classpath.jboss.JBossVFSv3ClassPathLocationScanner$1' (package: 'org.flywaydb.core.internal.scanner.classpath.jboss') from class path: org/jboss/vfs/VirtualFileFilter
at com.pulumi.serialization.internal.ResourcePackages.lambda$discoverResourceTypes$0(ResourcePackages.java:73)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
Any way we can use a "*" to disable the resource scanning behavior? Or any other recommended fix/workaround?
When rebasing this often causes failures: I set the pulumi.resourcepackages.excludes to a long list of packages but new ones from newly added imports trigger these failures.
Example
2025-07-17T19:51:56.407-0700 ERROR ForkJoinPool.commonPool-worker-6 com.pulumi.deployment.internal.DeploymentImpl Running program [PID: 78011] ... failed with an unhandled exception:
java.lang.IllegalStateException: Failed to load class 'org.flywaydb.core.internal.scanner.classpath.jboss.JBossVFSv3ClassPathLocationScanner$1' (package: 'org.flywaydb.core.internal.scanner.classpath.jboss') from class path: org/jboss/vfs/VirtualFileFilter
at com.pulumi.serialization.internal.ResourcePackages.lambda$discoverResourceTypes$0(ResourcePackages.java:73)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
Output of pulumi about
Version 3.175.0
Go Version go1.24.3
Go Compiler gc
Host
OS darwin
Version 15.5
Arch arm64
Current Stack: IceGuard/cyber-range/elon-dev
TYPE URN
pulumi:pulumi:Stack urn:pulumi:elon-dev::cyber-range::pulumi:pulumi:Stack::cyber-range-elon-dev
iceguard:cloudtrail urn:pulumi:elon-dev::cyber-range::iceguard:cloudtrail::data-events-cloudtrail
iceguard:eks:MinimalEksCluster urn:pulumi:elon-dev::cyber-range::iceguard:eks:MinimalEksCluster::cyber-range
pulumi:providers:aws urn:pulumi:elon-dev::cyber-range::pulumi:providers:aws::iceguard-aws-us-west-2
pulumi:providers:awsx urn:pulumi:elon-dev::cyber-range::pulumi:providers:awsx::default_2_22_0
aws:s3/bucketV2:BucketV2 urn:pulumi:elon-dev::cyber-range::iceguard:cloudtrail$aws:s3/bucketV2:BucketV2::data-events-cloudtrail-CloudTrailBucket
pulumi:providers:tls urn:pulumi:elon-dev::cyber-range::pulumi:providers:tls::iceguard-aws-tls-us-west-2
awsx:ec2:Vpc urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc::cyber-range-vpc
pulumi:providers:aws urn:pulumi:elon-dev::cyber-range::pulumi:providers:aws::default_6_66_3
aws:iam/role:Role urn:pulumi:elon-dev::cyber-range::aws:iam/role:Role::nodegroup-role
aws:s3/bucketPolicy:BucketPolicy urn:pulumi:elon-dev::cyber-range::aws:s3/bucketPolicy:BucketPolicy::cloudTrailBucketPolicy
aws:iam/instanceProfile:InstanceProfile urn:pulumi:elon-dev::cyber-range::aws:iam/instanceProfile:InstanceProfile::nodegroup-instance-profile
aws:iam/rolePolicyAttachment:RolePolicyAttachment urn:pulumi:elon-dev::cyber-range::aws:iam/rolePolicyAttachment:RolePolicyAttachment::cni-nodegroup-policy
aws:cloudtrail/trail:Trail urn:pulumi:elon-dev::cyber-range::iceguard:cloudtrail$aws:cloudtrail/trail:Trail::dataEventsTrail
aws:iam/rolePolicyAttachment:RolePolicyAttachment urn:pulumi:elon-dev::cyber-range::aws:iam/rolePolicyAttachment:RolePolicyAttachment::ecr-nodegroup-policy
aws:iam/rolePolicyAttachment:RolePolicyAttachment urn:pulumi:elon-dev::cyber-range::aws:iam/rolePolicyAttachment:RolePolicyAttachment::worker-nodegroup-policy
aws:ec2/vpc:Vpc urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc::cyber-range-vpc
aws:ec2/internetGateway:InternetGateway urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/internetGateway:InternetGateway::cyber-range-vpc
aws:ec2/subnet:Subnet urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet::cyber-range-vpc-public-2
aws:ec2/subnet:Subnet urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet::cyber-range-vpc-public-1
aws:ec2/subnet:Subnet urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet::cyber-range-vpc-private-1
aws:ec2/subnet:Subnet urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet::cyber-range-vpc-private-3
aws:ec2/subnet:Subnet urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet::cyber-range-vpc-private-2
aws:ec2/subnet:Subnet urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet::cyber-range-vpc-public-3
aws:ec2/routeTable:RouteTable urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable::cyber-range-vpc-public-2
aws:ec2/eip:Eip urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/eip:Eip::cyber-range-vpc-2
aws:ec2/routeTable:RouteTable urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable::cyber-range-vpc-public-1
aws:ec2/eip:Eip urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/eip:Eip::cyber-range-vpc-1
aws:ec2/routeTable:RouteTable urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable::cyber-range-vpc-private-1
aws:ec2/routeTable:RouteTable urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable::cyber-range-vpc-private-3
aws:ec2/routeTable:RouteTable urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable::cyber-range-vpc-private-2
aws:ec2/routeTable:RouteTable urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable::cyber-range-vpc-public-3
aws:ec2/eip:Eip urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/eip:Eip::cyber-range-vpc-3
aws:ec2/route:Route urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/route:Route::cyber-range-vpc-public-2
aws:ec2/natGateway:NatGateway urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/natGateway:NatGateway::cyber-range-vpc-1
aws:ec2/route:Route urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/route:Route::cyber-range-vpc-public-1
aws:ec2/routeTableAssociation:RouteTableAssociation urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/routeTableAssociation:RouteTableAssociation::cyber-range-vpc-public-1
aws:ec2/natGateway:NatGateway urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/natGateway:NatGateway::cyber-range-vpc-2
aws:ec2/routeTableAssociation:RouteTableAssociation urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/routeTableAssociation:RouteTableAssociation::cyber-range-vpc-public-2
aws:ec2/routeTableAssociation:RouteTableAssociation urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/routeTableAssociation:RouteTableAssociation::cyber-range-vpc-private-2
aws:ec2/routeTableAssociation:RouteTableAssociation urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/routeTableAssociation:RouteTableAssociation::cyber-range-vpc-private-1
aws:ec2/routeTableAssociation:RouteTableAssociation urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/routeTableAssociation:RouteTableAssociation::cyber-range-vpc-private-3
aws:ec2/route:Route urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/route:Route::cyber-range-vpc-public-3
aws:ec2/routeTableAssociation:RouteTableAssociation urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/routeTableAssociation:RouteTableAssociation::cyber-range-vpc-public-3
aws:ec2/natGateway:NatGateway urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/natGateway:NatGateway::cyber-range-vpc-3
aws:ec2/route:Route urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/route:Route::cyber-range-vpc-private-1
aws:ec2/route:Route urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/route:Route::cyber-range-vpc-private-2
aws:ec2/route:Route urn:pulumi:elon-dev::cyber-range::awsx:ec2:Vpc$aws:ec2/vpc:Vpc$aws:ec2/subnet:Subnet$aws:ec2/routeTable:RouteTable$aws:ec2/route:Route::cyber-range-vpc-private-3
Found no pending operations associated with IceGuard/elon-dev
Backend
Name pulumi.com
URL https://app.pulumi.com/eloniceguard
User eloniceguard
Organizations eloniceguard, IceGuard
Token type personal
Pulumi locates its logs in /var/folders/by/sytsdqz94jv_bcpmqmlzl5z80000gn/T/ by default
Additional context
No response
Contributing
Vote on this issue by adding a 👍 reaction.
To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in sdk/java/pulumi/src/main/java/com/pulumi/serialization/internal/ResourcePackages.java, especially discoverResourceTypes and its use around lines 66-78, then reproduce the reported class-loading failures during a deployment. Trace how the exception reaches DeploymentImpl and verify that a missing class during resource scanning no longer causes unhandled failure or resource deletion, with coverage for the reported scanning cases.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100