Upgrade Tapestry build to Java 11

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Upgrade Tapestry build to Java 11

Dmitry Gusev
Hi everyone!

Earlier this year I worked on a project where we upgraded all Tapestry apps
of one of our client to Java 11 with source & target compatibility = 11. We
were using custom version of Tapestry with only one patch on top of current
state of the master which I just checked in to the main code base:

https://issues.apache.org/jira/browse/TAP5-2611

However I couldn't find a way to write a test for it as it would require
some test classes compiled with Java 11 target compatibility level.

I've found the following issue discussing migration path to Java 11 for the
Tapestry build, but the issue is now closed and there were not conclusion
on what should be done next:

https://issues.apache.org/jira/browse/TAP5-2588

I tried to upgrade the build to Java 11 before I found discussion in
TAP5-2588, and I even upgraded most of it while experimenting and got all
the tests green, except tapestry-javadoc module, which at first glance
requires code rewrite and not just library upgrades and minor fixes as it
was with core modules.

I found that current build has some customisations for Java 9, and in
TAP5-2588 there were discussions about supporting Java 10 also, but I don't
think that's necessary at the moment when Java 11 -- current LTS release --
is out, as those are intermediate releases and are already not supported.

So I would suggest to go straight to Java 11 after we release current state
of master (5.5.x).

Starting from 5.6 all releases can remain binary compatible with java 8,
but the build itself may leverage the java 11 compiler to start testing
java 8+ compatibility, as required by TAP5-2611, for example.

What do you think?

Best regards,
Dmitry
Reply | Threaded
Open this post in threaded view
|

Re: Upgrade Tapestry build to Java 11

Ben Weidig
Hi Dmitry,

thanks for all the work towards Java 11!

We're trying to get it up and running ourselves but without much luck...

You committed the patch for the private instrumentations, but I don't see
any modifications on the build.gradle, I assume this is because your
suggestion of doing Java 11 support after the release of 5.5.x

Could you give us some pointers how we could build Tapestry 5.5 with
target/source for Java 11?

So far we've done the following trying to get the project to build with
OpenJDK 11 and gradle on the command line including all tests:
- gradle update to 4.10.3
- spock update to 1.2-groovy-2.4
- settings.gradle: remove unnecessary projects (e.g. javadoc, kaptcha,
mongo, clojure etc.)
- build.gradle: jdkMajorVersion convert to int and remove "--add-modules"
for Java 11"
- build.gradle: remove dependencies on tapestry-javadoc (117)
- build.gradle: remove jacoco
- build.gradle: sourceCompatibility/targetCompatibility 11
- build.gradle: idea project languageLevel 11

It's building, but testing is wonky, mostly becausome unit tests are
failing. JUnit tries to run helper classes as Tests (e.g.
AccessMethodsSubject, ProtectedFieldCollaborator), which fails with
initializationError.

Integration tests run in Quantum, but some are failing, but maybe Quantum
is the reason here, didn't dig into it.

Did you ran into any other bigger issues with running your projects on Java
11?

We have a few 100k lines of code and use the IoC heavily for projects
customization and would love to test it on our end and create
issues/patches in Jira if we run into any problems.

Cheers,
Ben

On Sat, Jun 22, 2019 at 11:56 PM Dmitry Gusev <[hidden email]>
wrote:

> Hi everyone!
>
> Earlier this year I worked on a project where we upgraded all Tapestry apps
> of one of our client to Java 11 with source & target compatibility = 11. We
> were using custom version of Tapestry with only one patch on top of current
> state of the master which I just checked in to the main code base:
>
> https://issues.apache.org/jira/browse/TAP5-2611
>
> However I couldn't find a way to write a test for it as it would require
> some test classes compiled with Java 11 target compatibility level.
>
> I've found the following issue discussing migration path to Java 11 for the
> Tapestry build, but the issue is now closed and there were not conclusion
> on what should be done next:
>
> https://issues.apache.org/jira/browse/TAP5-2588
>
> I tried to upgrade the build to Java 11 before I found discussion in
> TAP5-2588, and I even upgraded most of it while experimenting and got all
> the tests green, except tapestry-javadoc module, which at first glance
> requires code rewrite and not just library upgrades and minor fixes as it
> was with core modules.
>
> I found that current build has some customisations for Java 9, and in
> TAP5-2588 there were discussions about supporting Java 10 also, but I don't
> think that's necessary at the moment when Java 11 -- current LTS release --
> is out, as those are intermediate releases and are already not supported.
>
> So I would suggest to go straight to Java 11 after we release current state
> of master (5.5.x).
>
> Starting from 5.6 all releases can remain binary compatible with java 8,
> but the build itself may leverage the java 11 compiler to start testing
> java 8+ compatibility, as required by TAP5-2611, for example.
>
> What do you think?
>
> Best regards,
> Dmitry
>


--

Netzgut GmbH
Reply | Threaded
Open this post in threaded view
|

Re: Upgrade Tapestry build to Java 11

Dmitry Gusev
Hi Ben!

I didn't try to compile Tapestry itself to target compatibility = 11,
as I mentioned above it should probably remain java 8 for some time.

It isn't necessary for the time being, we may do so later when we implement
proper jigsaw modules.

For now I was talking mostly about using JDK 11 complier with
source/targetCompatibility=8,
to be able to create Java 11 compatibility tests.

It shouldn't stop you from adding current state of the master branch in
your Java 11 projects
as regular 3rd party dependency, same as we did with ours.

I can't recall any issues of using current state of the master branch with
Java 11,
Tapestry team and contributors already did most of the job.


On Sun, Jun 23, 2019 at 4:10 PM Ben Weidig <[hidden email]> wrote:

> Hi Dmitry,
>
> thanks for all the work towards Java 11!
>
> We're trying to get it up and running ourselves but without much luck...
>
> You committed the patch for the private instrumentations, but I don't see
> any modifications on the build.gradle, I assume this is because your
> suggestion of doing Java 11 support after the release of 5.5.x
>
> Could you give us some pointers how we could build Tapestry 5.5 with
> target/source for Java 11?
>
> So far we've done the following trying to get the project to build with
> OpenJDK 11 and gradle on the command line including all tests:
> - gradle update to 4.10.3
> - spock update to 1.2-groovy-2.4
> - settings.gradle: remove unnecessary projects (e.g. javadoc, kaptcha,
> mongo, clojure etc.)
> - build.gradle: jdkMajorVersion convert to int and remove "--add-modules"
> for Java 11"
> - build.gradle: remove dependencies on tapestry-javadoc (117)
> - build.gradle: remove jacoco
> - build.gradle: sourceCompatibility/targetCompatibility 11
> - build.gradle: idea project languageLevel 11
>
> It's building, but testing is wonky, mostly becausome unit tests are
> failing. JUnit tries to run helper classes as Tests (e.g.
> AccessMethodsSubject, ProtectedFieldCollaborator), which fails with
> initializationError.
>
> Integration tests run in Quantum, but some are failing, but maybe Quantum
> is the reason here, didn't dig into it.
>
> Did you ran into any other bigger issues with running your projects on Java
> 11?
>
> We have a few 100k lines of code and use the IoC heavily for projects
> customization and would love to test it on our end and create
> issues/patches in Jira if we run into any problems.
>
> Cheers,
> Ben
>
> On Sat, Jun 22, 2019 at 11:56 PM Dmitry Gusev <[hidden email]>
> wrote:
>
> > Hi everyone!
> >
> > Earlier this year I worked on a project where we upgraded all Tapestry
> apps
> > of one of our client to Java 11 with source & target compatibility = 11.
> We
> > were using custom version of Tapestry with only one patch on top of
> current
> > state of the master which I just checked in to the main code base:
> >
> > https://issues.apache.org/jira/browse/TAP5-2611
> >
> > However I couldn't find a way to write a test for it as it would require
> > some test classes compiled with Java 11 target compatibility level.
> >
> > I've found the following issue discussing migration path to Java 11 for
> the
> > Tapestry build, but the issue is now closed and there were not conclusion
> > on what should be done next:
> >
> > https://issues.apache.org/jira/browse/TAP5-2588
> >
> > I tried to upgrade the build to Java 11 before I found discussion in
> > TAP5-2588, and I even upgraded most of it while experimenting and got all
> > the tests green, except tapestry-javadoc module, which at first glance
> > requires code rewrite and not just library upgrades and minor fixes as it
> > was with core modules.
> >
> > I found that current build has some customisations for Java 9, and in
> > TAP5-2588 there were discussions about supporting Java 10 also, but I
> don't
> > think that's necessary at the moment when Java 11 -- current LTS release
> --
> > is out, as those are intermediate releases and are already not supported.
> >
> > So I would suggest to go straight to Java 11 after we release current
> state
> > of master (5.5.x).
> >
> > Starting from 5.6 all releases can remain binary compatible with java 8,
> > but the build itself may leverage the java 11 compiler to start testing
> > java 8+ compatibility, as required by TAP5-2611, for example.
> >
> > What do you think?
> >
> > Best regards,
> > Dmitry
> >
>
>
> --
>
> Netzgut GmbH
>


--
Dmitry Gusev

AnjLab Team
http://anjlab.com
Reply | Threaded
Open this post in threaded view
|

Re: Upgrade Tapestry build to Java 11

Thiago H de Paula Figueiredo
In reply to this post by Dmitry Gusev
On Sat, Jun 22, 2019 at 6:56 PM Dmitry Gusev <[hidden email]> wrote:

> Hi everyone!
>

Hello, everyone!


> I tried to upgrade the build to Java 11 before I found discussion in
> TAP5-2588, and I even upgraded most of it while experimenting and got all
> the tests green, except tapestry-javadoc module, which at first glance
> requires code rewrite and not just library upgrades and minor fixes as it
> was with core modules.
>

Indeed, before we build Tapestry with Java 11, we'll need to rewrite at
least tapestry-javadoc, but I guess that's mostly it. If we want to provide
proper Java 9 modules too, we'll need to move some classes between
packages, since each package can only be in one module, and now we have
some packages with classes in more than one subproject/artifact/JAR. Far
from trivial.


> So I would suggest to go straight to Java 11 after we release current state
> of master (5.5.x).
>

Agreed.

What about Java 12? It was released last March. I haven't checked what are
the differences to 11, though.


> Starting from 5.6 all releases can remain binary compatible with java 8,
> but the build itself may leverage the java 11 compiler to start testing
> java 8+ compatibility, as required by TAP5-2611, for example.
>

Agreed too.

And thanks Dmitry for starting this important discussion!

--
Thiago