Building a GWT project in Eclipse 2019-03+ with Java 11.

1,630 views
Skip to first unread message

Jim Douglas

unread,
Jul 23, 2019, 5:38:41 PM7/23/19
to GWT Users
As of Eclipse 2019-03, Eclipse started to strictly enforce JLS §7.4.3 (7.4.3. Package Observability and Visibility), as discussed here:



This means that when building with Java 11, any Eclipse package with a classpath that contains any classes that are also defined in the JDK will now report a flood of build errors in the format:

"The package org.w3c.dom is accessible from more than one module: <unnamed>, jdk.xml.dom" 

My GWT project uses classes that are defined in these Java 11 modules:



It turns out that gwt-dev.jar contains several hundred classes that conflict with Java 11 internal modules. In an attempt to hack around this, I made a copy of the gwt-2.8.2 folder and stripped out the offending classes:

scrappy:gwt-2.8.2-mod jimdouglas$ zip -d gwt-dev.jar "org/w3c/*" "org/xml/*" "javax/xml/*" "netscape/javascript/*"


When I configure Eclipse 2019-06 to use this modified GWT 2.8.2 SDK, i am able to more or less get it to build, eventually, but with a flood of obscure "Validating GWT Components" errors that have to be tediously clicked through:

An internal error occurred during: "Validating GWT components".

class org.eclipse.jdt.internal.compiler.lookup.ProblemReferenceBinding cannot be cast to class org.eclipse.jdt.internal.compiler.lookup.PackageBinding (org.eclipse.jdt.internal.compiler.lookup.ProblemReferenceBinding and org.eclipse.jdt.internal.compiler.lookup.PackageBinding are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @57cd77e1)


So...first question: Did I miss an important step when I stripped those classes out of gwt-dev.jar? Or is there a way to make "Validating GWT components" stop complaining?

And moving forward, are there plans for a GWT 2.9.0, and would it be possible for it to incorporate some version of this hack, or whatever other changes are necessary to enable GWT development in Eclipse with Java 11? (N.B. I don't particularly care about Java 11 syntax support, just minimal build ability.)

ValidatingGWTComponents.png


Jens

unread,
Jul 24, 2019, 3:10:46 AM7/24/19
to GWT Users

When I configure Eclipse 2019-06 to use this modified GWT 2.8.2 SDK, i am able to more or less get it to build, eventually, but with a flood of obscure "Validating GWT Components" errors that have to be tediously clicked through:

An internal error occurred during: "Validating GWT components".

class org.eclipse.jdt.internal.compiler.lookup.ProblemReferenceBinding cannot be cast to class org.eclipse.jdt.internal.compiler.lookup.PackageBinding (org.eclipse.jdt.internal.compiler.lookup.ProblemReferenceBinding and org.eclipse.jdt.internal.compiler.lookup.PackageBinding are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @57cd77e1)


So...first question: Did I miss an important step when I stripped those classes out of gwt-dev.jar? Or is there a way to make "Validating GWT components" stop complaining?


I don't think so. IMHO it looks like an Eclipse bug or the GWT plugin needs to be updated.


If we plan to announce that GWT 2.9 will be Java 11 compatible (syntax) then contributors will probably also sit down and make sure it works in IDEs either out of the box or by providing instructions how to configure Eclipse to make it work. In general all those 3rd party classes are included in gwt-dev.jar to just have a single dependency that needs to be added by the GWT plugin. The Maven release of GWT pulls those in as transitive dependencies. 

I think going forward GWT SDK release (non Maven release) should repackage all those dependencies into com.google.gwt.thirdparty as it already does for some dependencies. That way we can also make sure that no dependency version conflicts exist on class path.


-- J.

Thomas Broyer

unread,
Jul 24, 2019, 10:03:08 AM7/24/19
to GWT Users
Ideally, people should stop using the "GWT SDK" uberjars to begin with; because the JAR that's deployed to the Central Repository does not have these packages: https://github.com/gwtproject/gwt/blob/4d36d55d26aabc12e4429faf0603c539a54a13cd/maven/lib-gwt.sh#L109

Jim Douglas

unread,
Jul 24, 2019, 10:47:10 AM7/24/19
to GWT Users
> Ideally, people should stop using the "GWT SDK" uberjars to begin with

Is there currently any way to develop a GWT application in Eclipse without using the GWT SDK?

Jens

unread,
Jul 24, 2019, 11:05:16 AM7/24/19
to GWT Users

Is there currently any way to develop a GWT application in Eclipse without using the GWT SDK?

Sure. Use a build tool of your choice and use the maven dependencies. 

If I remember correctly the GWT plugin for eclipse will pick up the gwt-user/gwt-dev jar from the class path if you have a maven/gradle project in eclipse. Alternatively you can launch GWT SDM / Compiler using Maven/Gradle plugins. Or you use your build tool to download all dependencies and then launch GWT SDM / Compiler using a shell script.

-- J.

Jim Douglas

unread,
Jul 24, 2019, 11:14:42 AM7/24/19
to GWT Users
> Sure. Use a build tool of your choice and use the maven dependencies. 

I don't know what that means. As far as I've ever known, developing a GWT application in Eclipse implies installing the GWT Plugin for Eclipse and picking a GWT SDK.

Thomas Broyer

unread,
Jul 24, 2019, 11:40:21 AM7/24/19
to GWT Users


On Wednesday, July 24, 2019 at 5:14:42 PM UTC+2, Jim Douglas wrote:
> Sure. Use a build tool of your choice and use the maven dependencies. 

I don't know what that means. As far as I've ever known, developing a GWT application in Eclipse implies installing the GWT Plugin for Eclipse and picking a GWT SDK.


Nope.
Install the GWT Eclipse Plugin (https://gwt-plugins.github.io/documentation/gwt-eclipse-plugin/Download.html; note that the SDKs are optional).
You're all set; the plugin will use the GWT dependencies from the Maven project.

Juan Pablo Gardella

unread,
Jul 24, 2019, 11:46:25 AM7/24/19
to GWT Users
Hi Jim,

I am working with GWT 2.8.2 + Java11 in a multi module maven project. You can use https://tbroyer.github.io/gwt-maven-plugin/ to create a simple archetype from it and start putting your classes according it usage (that information is described in the links shared by Thomas).  To run/debug the project, I execte mvn gwt:codeserver from parent project (pom artifact) and I created a Eclipse launcher at server artifact (it starts a Jenkins webapp). Let me know if it is clear. 

In my case, the server is a spring boot application. There are some tricks to handle the static content, but you workaround them by adding some properties. I could provide a simple sample if you want.

Juan


--
You received this message because you are subscribed to the Google Groups "GWT Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-tool...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit/1659e95f-d41b-4dc4-9787-95d50bc5a120%40googlegroups.com.

Juan Pablo Gardella

unread,
Jul 24, 2019, 11:46:45 AM7/24/19
to GWT Users
not Jenkins, Jetty webapp I mean.

Jim Douglas

unread,
Jul 24, 2019, 11:54:24 AM7/24/19
to GWT Users
Umm, ok. We have an extremely large and complex GWT development environment here, developed over a decade; God only knows what might be involved in rearchitecting it to not use the GWT SDK. It's complete news to me that there's any alternative; I don't quite know where to start in trying to make sense of this configuration.

But I have to go back to my original question: Wouldn't it be theoretically trivial to simply strip out the offending classes from gwt-dev.jar in the process of publishing a GWT 2.9.0? And is there seriously no way to tell the "Validating GWT components" process to stop harassing me?

Jens

unread,
Jul 24, 2019, 12:35:00 PM7/24/19
to GWT Users

But I have to go back to my original question: Wouldn't it be theoretically trivial to simply strip out the offending classes from gwt-dev.jar in the process of publishing a GWT 2.9.0?

That would break everyone using current GWT SDK. repackaging into a different package would be the better option. 

You can download and use the GWT artifacts published to Maven Central (https://search.maven.org/search?q=g:com.google.gwt) which do not include the offending classes. However you must provide these classes manually then as additional jars on your class path.

The only thing that is still packaged with gwt-dev.jar from Maven Central is a patched version of Eclipse JDT compiler.

 
And is there seriously no way to tell the "Validating GWT components" process to stop harassing me?

I assume you can open the projects settings in Eclipse and disable the GWT validator. There is a validation section somewhere in the Eclipse settings.


-- J.

Jens

unread,
Jul 24, 2019, 12:37:20 PM7/24/19
to GWT Users

You can download and use the GWT artifacts published to Maven Central (https://search.maven.org/search?q=g:com.google.gwt) which do not include the offending classes. However you must provide these classes manually then as additional jars on your class path.

On the left side you can scroll through the Maven pom.xml and see a list of all the direct dependencies gwt-dev.jar depends on.


-- J.
Message has been deleted

Jim Douglas

unread,
Jul 31, 2019, 2:02:53 PM7/31/19
to GWT Users
We have a large and complex Eclipse project that uses the GWT SDK for the GWT client stuff, and doesn't use Maven in any way at all. How would we go about evolving that away from the GWT SDK? I know effectively nothing about Maven. Is there some sort of instruction list somewhere to convert an existing project, as opposed to creating a new project from scratch?

I'm staring at this, and I don't know what to make of it:


It seems to assume I already know what Maven is, I already have a Maven project, I understand all of this obscure terminology, and I know how to edit various configuration files...and I'm just trying to find a page that says "How to install this thing."

Thomas Broyer

unread,
Aug 1, 2019, 7:34:05 AM8/1/19
to GWT Users


On Wednesday, July 31, 2019 at 8:02:53 PM UTC+2, Jim Douglas wrote:
We have a large and complex Eclipse project that uses the GWT SDK for the GWT client stuff, and doesn't use Maven in any way at all. How would we go about evolving that away from the GWT SDK? I know effectively nothing about Maven. Is there some sort of instruction list somewhere to convert an existing project, as opposed to creating a new project from scratch?

Are you saying that you have zero build tool‽ not even Ant? (because Ant, with Ivy, can resolve dependencies from Maven repositories too; I have no idea how to do it myself, but there are, or have been, people here using Ivy who could possibly help)
 
I'm staring at this, and I don't know what to make of it:


It seems to assume I already know what Maven is, I already have a Maven project, I understand all of this obscure terminology, and I know how to edit various configuration files...

It does assume you already know Maven, yes.
 
and I'm just trying to find a page that says "How to install this thing."

That's not how things work; "this thing" is a plugin for Maven, one of many plugins any Maven project will use during a build.
And you don't "install" it, once you have Maven installed, you only need to describe your dependencies (and plugins) in an XML file (pom.xml) and Maven will download things for you.

But you don't need to move your whole build to using Maven only to use dependencies from a Maven repository. You could for example use Coursier (or Maven or Ivy or Gradle or SBT) to retrieve all the JARs, and continue using your current setup for the rest.

Jim Douglas

unread,
Aug 2, 2019, 12:50:58 PM8/2/19
to GWT Users
Ok, StackOverflow showed me how to convert an existing Eclipse project to a Maven Project, then based on your steps 1 and 3 I copied those chunks into the generated pom.xml (I couldn't make any sense of step 2, so I skipped it). After hunting down and (I think) resolving some module conflicts, that gave me this pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>BBj</groupId>

<artifactId>BBj</artifactId>

<version>19.10-SNAPSHOT</version>

<dependencyManagement>

<dependencies>

<dependency>

<groupId>com.google.gwt</groupId>

<artifactId>gwt</artifactId>

<version>2.8.2</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

<dependencies>

<dependency>

<groupId>com.google.gwt</groupId>

<artifactId>gwt-user</artifactId>

</dependency>

<dependency>

<groupId>com.google.gwt</groupId>

<artifactId>gwt-dev</artifactId>

<exclusions>

<exclusion>

<groupId>xml-apis</groupId>

<artifactId>xml-apis</artifactId>

</exclusion>

<exclusion>

<groupId>net.sourceforge.htmlunit</groupId>

<artifactId>htmlunit</artifactId>

</exclusion>

</exclusions>

</dependency>

</dependencies>

<build>

<sourceDirectory>src</sourceDirectory>

<resources>

<resource>

<directory>src</directory>

<excludes>

<exclude>**/*.java</exclude>

</excludes>

</resource>

<resource>

<directory>.apt_generated</directory>

<excludes>

<exclude>**/*.java</exclude>

</excludes>

</resource>

</resources>

<plugins>

<plugin>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.8.0</version>

<configuration>

<release>11</release>

</configuration>

</plugin>

<plugin>

<groupId>net.ltgt.gwt.maven</groupId>

<artifactId>gwt-maven-plugin</artifactId>

<version>1.0-rc-10</version>

<extensions>true</extensions>

<configuration>

<moduleName>com.basis.bbj.web.gwt.GWTWebClient</moduleName>

<webappDirectory>/BBj/war/WEB-INF/classes</webappDirectory>

</configuration>

</plugin>

</plugins>

</build>

</project>


What is this Eclipse error message trying to tell me?

Description Resource Path Location Type
The output directory for the project should be set to /BBj/war/WEB-INF/classes BBj Unknown GWT Web App Problem

Jim Douglas

unread,
Aug 6, 2019, 12:24:48 AM8/6/19
to GWT Users
Ok, after more trial and effort, this pom.xml might be working....are there any obvious problems with it?

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>BBj</groupId>

<artifactId>BBj</artifactId>

<version>19.10-SNAPSHOT</version>

    <packaging>gwt-app</packaging>

<outputDirectory>war/WEB-INF/classes</outputDirectory>

</configuration>

</plugin>

</plugins>

</build>

</project>


tekkyru

unread,
Feb 15, 2022, 4:30:30 PM2/15/22
to GWT Users
Hi, 

> You're all set; the plugin will use the GWT dependencies from the Maven project.

The question - can I configure it with gradle?

I'm porting a GWT gradle-based Eclipse project from JDK 1.8 to JDK 17 (and from 2.8.2 to 2.9.0)
In Eclipse, there's typical JDK11+ error "The package org.xml.sax.helpers is accessible from more than one module" and it looks like the org.xml.sax classes shipped in gwt-dev.jar clash with jdk. Eclipse compiler somehow refers gwt-dev.jar. 
Command line gradle build succeeds OK.
If maven-central version of gwt-dev doesn't contain duplicating classes it would save the day. 

Is there a way to configure gradle project to force Eclipse plugin to use GWT version from gradle dependencies?

I have GWT 2.9.0 installed and added in Eclipse. To avoid referring this all-inclusive gwt-dev I removed GWT-2.9.0 from list of GWT SDKs in Eclipse settings, and now after importing/refreshing my gradle project the GWT plugin SDK selection doesn't contain 2.9.0 anymore even if I specify gradle dependency.

thank you

среда, 24 июля 2019 г. в 17:40:21 UTC+2, t.br...@gmail.com:

blackh...@gmail.com

unread,
Feb 16, 2022, 12:12:23 AM2/16/22
to GWT Users
Hi ,

You mention that you are migrating from jdk 1.8 to jdk 17.
We are in the same process, any tips you have?

regards,

Jasper

Op dinsdag 15 februari 2022 om 22:30:30 UTC+1 schreef tequil...@gmail.com:

tekkyru

unread,
Feb 18, 2022, 7:57:16 PM2/18/22
to GWT Users
Hi Jasper

I'll be just glad if my current progress saves someone's time.
I progress on step by step basis, so far I succeeded in Eclipse build and debugging.

Most of my problems were caused by combination of JDK11+ (namely modules) + Gradle + Eclipse + Eclipse GWT Plugin. 

Reason: GWT SDK gwt-dev.jar contains lot of classes that must not be visible to Eclipse compiler, but in fact they are, causing dreaded "The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml" error.
When `gradle build` is issued in command line the gwt-dev.jar from the maven repository is linked, it contains exactly essential google classes and nothing more. Thus the build succeeds.

But when you import such project in Eclipse under JDK11+ (I use JDK17) and select a GWT SDK there're lots of build errors caused by "The package is accessible from more than one module"

Reason: To run devmode or compilation server in Eclipse via Eclipse GWT plugin, you need full-blown gwt-dev.jar, so you need to install a GWT SDK and select it in your Eclipse project. And for some reason (by design of the Eclipse GWT plugin) this gwt-dev.jar from SDK spoils the Eclipse compilation classpath even if the build.gradle adds a dependency to the "essential" gwt-dev.jar

Indeed the Eclipse GWT Plugin allows to use an "essential" gwt-dev.jar from project dependencies instead of a real GWT SDK (even without installing it and registering in Eclipse), but only for Maven projects. Gradle is not covered. 

My solution was to patch an existing GWT SDK:

1. prepare GWT SDK 
assuming we have it installed into gwt-2.9.0 folder:
  mv gwt-2.9.0 gwt-2.9.0-jdk11
  cd gwt-2.9.0-jdk11

rename full blown gwt-dev 
  mv gwt-dev.jar gwt-dev-rundevserver-full.jar

 then assuming we already have dependencies stored in cache let's get the "essential" jar 
  cp ~/.m2/repository/com/google/gwt/gwt-dev/2.9.0/gwt-dev-2.9.0.jar gwt-dev.jar
 it will leak to Eclipse build classpath but it's jdk11-conformant (or rather Jigsaw conformant)

2. add the patched GWT SDK (its folder name gwt-2.9.0-jdk11 is used as its name) to Eclipse project via maven, so it will be already bound after project import
  
  eclipse.classpath {
    containers "com.gwtplugins.gwt.eclipse.core.GWT_CONTAINER/gwt-2.9.0-jdk11"
  }

3. Fix compilation server launcher

Let's refer the full-blown jar in launcher started by GWT Plugin:

Add a web server to eclipse (Tomcat or another one), 
add your webapp to the server (at this moment I usually set server start timeout to really long interval and uncheck the webapp "autoreloading enabled" to avoid webapp relaunch on hot code replace), 
then click "debug server" button:
  -> compilation server launcher config will be created, your webapp and the compilation server will launch but the latter will fail because the gwt-2.9.0-jdk11/gwt-dev.jar only contains skeleton files 
 
Stop the webapp
Edit the compilation server configuration: 
Edit classpath adding GWT_SDK_HOME/gwt-dev-rundevserver-full.jar as external jar to the [User entries] as the last entry:

image_2022-02-19_013438.png
 
"Debug server" once more: the compilation server must start and work now. The debugger and hot code replace for server classes will work as they should, and the changes to client java GWT files will be promptly recompiled when you refresh the page. It works in web server of your choice, not in Jetty bundled with GWT SDK. 
And click-through / debugging into XML/Servlet classes no more opens java bytecode in fullblown gwt-dev.jar but proper source files of JDK or your dependencies.

Hope this helps

Tequilacat

среда, 16 февраля 2022 г. в 06:12:23 UTC+1, blackh...@gmail.com:

Thomas Broyer

unread,
Feb 20, 2022, 6:33:18 AM2/20/22
to GWT Users
On Saturday, February 19, 2022 at 1:57:16 AM UTC+1 tequil...@gmail.com wrote:
Hi Jasper

I'll be just glad if my current progress saves someone's time.
I progress on step by step basis, so far I succeeded in Eclipse build and debugging.

Most of my problems were caused by combination of JDK11+ (namely modules) + Gradle + Eclipse + Eclipse GWT Plugin. 

Reason: GWT SDK gwt-dev.jar contains lot of classes that must not be visible to Eclipse compiler, but in fact they are, causing dreaded "The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml" error.
When `gradle build` is issued in command line the gwt-dev.jar from the maven repository is linked, it contains exactly essential google classes and nothing more. Thus the build succeeds.

But when you import such project in Eclipse under JDK11+ (I use JDK17) and select a GWT SDK there're lots of build errors caused by "The package is accessible from more than one module"

Can't you somehow disable the module path or put all dependencies in the classpath rather than the module path?

Alternatively, how about not using the Eclipse GWT Plugin?

Luis Fernando Planella Gonzalez

unread,
Feb 20, 2022, 8:41:25 AM2/20/22
to GWT Users
We started using GWT in our project in 2009 (GWT 1.5.0!)
When we moved from Maven to Gradle in 2020 (one of the best decisions ever, because the project is complex, has a lot of code generation and Gradle's skipping of already executed tasks is a must - it was unbearable with Maven), we've also dropped the GWT Eclipse plugin altogether.
Also, we don't use a GWT plugin for Gradle either: instead, we just run either GWT codeserver or compiler via their main classes, setting up the classpath correctly.
To start with, as we already had multiple modules in the build system (api / impl / web, etc), we've split the GWT classes to a new module (no longer the web project).

Attached in this post is the anonymized and stripped down build.gradle file for the gwt module.

Finally, for us to be productive again in Eclipse, we've written a script that does the following:
  1. Delete the destination's nocache.js file
  2. Starts the code server via gradle, redirecting the output to a file
  3. Sleeps until the nocache.js file exists again
  4. Write the PID of the gradle process to a file
We run this from an Eclipse external tool, and have the tool's refresh option to refresh the web's project output dir. This way the publishing works flawlessly in Eclipse with a Tomcat server.

We've also created other 2 similar scripts / Eclipse tools: one to stop the codeserver (kill the process with the PID indicated in the file) and another one to show the codeserver log (tail -f1000 -n in the output file).

We'll never look back to neither the Eclipse plugin (which did many other things we don't use) nor to a Gradle plugin (which were mostly written once and abandoned, and Gradle evolves fast, introducing breaking changes, and that broke the project more than once).
build.gradle

tekkyru

unread,
Feb 20, 2022, 6:55:55 PM2/20/22
to GWT Users
Thanks for the answer

> Can't you somehow disable the module path or put all dependencies in the classpath rather than the module path?

Do you mean disabling java.xml module of JRE and depend on all xml stuff explicitly? It means I'd have to rely on dependencies instead of stock libraries (general app architecture choice) just to comply with a flawed development tool needed only to run debug sessions. I'd prefer to avoid it unless it's the only way.

>  Alternatively, how about not using the Eclipse GWT Plugin?

Our current workflow is using SuperDevMode + Jetty and I'd like to provide similar experience to our team. 
I saw such solutions (using gradle gretty plugin), so far decided against it. As far as I understand running the code server and my webapp via Gradle without Eclipse GWT plugin brings more hassle into everyday development routine. This way the webapp must be launched not as Eclipse debugging session but as Gradle task, and connected via remote debugging session. I'd like to avoid it.

воскресенье, 20 февраля 2022 г. в 12:33:18 UTC+1, t.br...@gmail.com:

Luis Fernando Planella Gonzalez

unread,
Feb 21, 2022, 5:27:04 AM2/21/22
to GWT Users
> Our current workflow is using SuperDevMode + Jetty and I'd like to provide similar experience to our team.
I had a similar concern, as before we both SuperDevMode and the app in the same Java process.
After the switch, we need to start the codeserver and then the app, via Tomcat. But, things went well, because:
  1. You don't have to start your app in the build tool and connect remotely. The codeserver will write its files to the same place as the regular compilation would, and you can start your app in a debug session in Eclipse. We're using the built-in Tomcat server (with Eclipse WTP). Just make sure that after starting the codeserver, you have your workspace refreshed, so Eclipse can publish it accordingly (that's why we wrote the script, as mentioned in the previous post)
  2. Starting the codeserver is actually slower than the app (at least for us, and the app is huge). When you debug the app, you'll eventually do an incompatible change that needs to restart the app. When using the codeserver as a separated process, it stays there, in the same place, even when you restart the app. IMO, this ended up being more productive than the previous setup
  3. If GWT 3 is ever released, having a separated codeserver will be the only option

tekkyru

unread,
Feb 21, 2022, 3:07:19 PM2/21/22
to GWT Users
Sounds interesting, I'll definitely give it a try, thank you - and for the gradle file, I really need a production grade gradle example 

понедельник, 21 февраля 2022 г. в 11:27:04 UTC+1, Luis Fernando Planella Gonzalez:
Reply all
Reply to author
Forward
0 new messages