Skip to content

Add enforceBytecodeVersion rule based on mojohaus#968

Open
cstamas wants to merge 4 commits intomasterfrom
enforce-bytecode-version
Open

Add enforceBytecodeVersion rule based on mojohaus#968
cstamas wants to merge 4 commits intomasterfrom
enforce-bytecode-version

Conversation

@cstamas
Copy link
Member

@cstamas cstamas commented Mar 25, 2026

This rule is very often used, and does not require anything special like new dependency, hence it should be among "built in" rules.

OTOH, it had issues, for example on larger multi projects did recheck same (potentially huge) JAR over and over again. It is now altered to not repeat same check (same options against same file) within same session.

This rule is 100% drop-in replacement for old uses (ITs are unmodified and just copied over), moreover rule itself has set priority that if enforce plugin gets updated with this rule, but the extra rules are present, the new rule will kick in. All the options are same as before, and rule name is unchanged as well.

Where it differs, and is reflected in ITs: is not so chatty as mojohaus one, it does not tell "skipped due scope", "skipped due regexp" etc, hence ITs are modified to simply assert for presence or absence of "[DEBUG] Analyzing GAV..." string instead.

This rule is very often used, and does not require anything special
like new dependency, hence it should be among "built in" rules.

OTOH, it had issues, for example on larger multi projects did
recheck same (potentinally huge) JAR over and over again.
It is now altered to not repeat same check (same options
against same file).
@cstamas cstamas self-assigned this Mar 25, 2026
JDK_TO_MAJOR_VERSION_NUMBER_MAPPING.put("8", 52);
JDK_TO_MAJOR_VERSION_NUMBER_MAPPING.put("1.8", 52);
// Java9
JDK_TO_MAJOR_VERSION_NUMBER_MAPPING.put("9", 53);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maps for jdk version > 52 is not requred, it will be computed
please look at methods renderVersion , decodeMajorVersion

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

version > 53, even ITs use notation like "1.9".

@@ -0,0 +1,613 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

License header is duplicated

@cstamas
Copy link
Member Author

cstamas commented Mar 25, 2026

Applied PR comments and added new option processOncePerSession (by def true), that if configured to false this rule will behave as before, to be able to disable optimization if it comes in way for any reason.

@slawekjaranowski
Copy link
Member

We also need to add a documentation.

I don't know why one test fail on Jenkins ...

@slawekjaranowski
Copy link
Member

As it is a modified version not directly copied from mojohaus, maybe we can change tile of change to something like:

Add enforceBytecodeVersion rule based on mojohaus

To avoid questions about IP rights 😄

@cstamas cstamas changed the title Moved rule from mojohaus: enforceBytecodeVersion Add enforceBytecodeVersion rule based on mojohaus Mar 25, 2026
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

Successfully merging this pull request may close these issues.

2 participants