Hi, as you may already know, MyFaces API and IMPL are seperate maven projects. The problem is, that this leads to duplicate code as some stuff needs to be used by API and IMPL. Therefore we have duplicated classes as package private classes in the API jar. Sometimes its also required to call IMPL classes from the API. Therefore we use reflection.
In Mojarra, API and IMPL are in 1 maven project, which has some big benefits: 1) many! less (duplicate) code 2) no reflection 3) better maintainability The question is, could we do the same? There is only one big contra: we don't have a >real seperate< API jar anymore. Mojarra just gets all javax.faces from the "mojarra.jar" and build a jsf-api.jar from it. We can easily do the same with minimal effort. But, if we merge both API and IMPL, it doesnt make sense to use the duplicates package private classes like _ComponentUtils or _ClassUtils. We should then use the org.apache.myfaces utils from the javax.faces classes. In generell thats completely fine but it has one downside: If users use the myfaces-extracted-api.jar with scope provided or test jar (without importing the whole/merged/api+impl myfaces.jar), it could throw NoClassDefFoundErrors because no org.apache.myfaces classes are in the classpath. For me it's perfectly fine. The same would also happen in Mojarra currently. WDYT? Best regards, Thomas
