apache / apache/maven-compiler-plugin
[MCOMPILER-421] multi release jar issue with module-info.java when using provides
- Dominant language
- Java
- Stars
- 261
- Forks
- 191
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 8
Description
**[John Patrick](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=nhoj.patrick)** opened **[MCOMPILER-421](https://issues.apache.org/jira/browse/MCOMPILER-421?redirect=false)** and commented
If you have the following structure you have to recompile everything for each version supported.
If you have the following code;
```
src/main/java/package/Service.java (1)
src/main/java/package/Example.java (2)
src/main/java/package/Java1dot8.java (3)
src/main/java11/package/Example.java (4)
src/main/java11/package/Java11.java (5)
src/main/java11/module-info.java (6)
src/main/java14/package/Example.java (7)
src/main/java14/package/Java14.java (8)
src/main/java14/module-info.java (9)
```
I expect the following jar structure;
```
package/Service.class (1)
package/Example.class (2)
package/Java1dot8.class (3)
META-INF/versions/11/package/Example.java (4)
META-INF/versions/11/package/Java11.java (5)
META-INF/versions/11/module-info.java (6)
META-INF/versions/14/package/Example.java (7)
META-INF/versions/14/package/Java14.java (8)
META-INF/versions/14/module-info.java (9)
```
Using the following maven configuration;
```
java11-main
compile
compile
11
11
${project.basedir}/src/main/java11
true
java14-main
compile
compile
14
14
${project.basedir}/src/main/java14
true
```
But due to needing to use provides and uses in the module-info.java
```
module MODULE_A {
exports PACKAGE_A;
uses PACKAGE_B.Service;
provides PACKAGE_B.Service
with PACKAGE_A.ServiceImpl;
}
```
I get compile errors with src/main/java11/module-info.java as that class is under src/main/java. So I need to change it to something like this so the compile see classes already compiled that are in target/classes;
```
java11-main
compile
compile
11
11
${project.basedir}/src/main/java
${project.basedir}/src/main/java11
true
java14-main
compile
compile
14
14
${project.basedir}/src/main/java
${project.basedir}/src/main/java11
${project.basedir}/src/main/java14
true
```
Which then produces a jar looking something like this;
```
package/Service.class (1)
package/Example.class (2)
package/Java1dot8.class (3)
META-INF/versions/11/package/Java1dot8.class (3)
META-INF/versions/11/package/Example.java (4)
META-INF/versions/11/package/Java11.java (5)
META-INF/versions/11/module-info.java (6)
META-INF/versions/14/package/Java1dot8.class (3)
META-INF/versions/14/package/Java11.java (5)
META-INF/versions/14/package/Example.java (7)
META-INF/versions/14/package/Java14.java (8)
META-INF/versions/14/module-info.java (9)
```
One of the projects that needs this is https://github.com/nhojpatrick/nhojpatrick-cucumber/tree/feature/surefire-3.0.0-M5
The actual module-info.java using provides is https://github.com/nhojpatrick/nhojpatrick-cucumber/blob/feature/surefire-3.0.0-M5/json-transformations/remove/src/main/java11/module-info.java
---
**Affects:** 3.8.1
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.