Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
RandomBlue
Dec 30, 2012

hay guys!


Biscuit Hider

Hippie Hedgehog posted:

Use a library.

Here's the first google result, I haven't used it myself:
https://github.com/stateless4j/stateless4j

This one looks elegant, but is for Kotlin:
https://github.com/Tinder/StateMachine

Just want to say whenever you're trying to solve a problem you should always look for libraries first. The number of times I've seen poo poo like people rolling their own CSV parser is insane.

No you didn't think of everything and no it's not parsing the CSV correctly.

Adbot
ADBOT LOVES YOU

smackfu
Jun 7, 2004

Of course, since it is Java, there is probably one library that everyone has used for ten years and that has a terrible API.

Hughlander
May 11, 2005

smackfu posted:

Of course, since it is Java, there is probably one library that everyone has used for ten years and that has a terrible API.

You mean 20-25 don’t you?

RandomBlue
Dec 30, 2012

hay guys!


Biscuit Hider

smackfu posted:

Of course, since it is Java, there is probably one library that everyone has used for ten years and that has a terrible API.

In my experience there are multiple library options for most common (and not so common) problems in Java.

For a lot of common problems, Apache Commons probably has a library for it and in my experience their libraries are decent.

chippy
Aug 16, 2006

OK I DON'T GET IT

RandomBlue posted:

Just want to say whenever you're trying to solve a problem you should always look for libraries first. The number of times I've seen poo poo like people rolling their own CSV parser is insane.

No you didn't think of everything and no it's not parsing the CSV correctly.

I work somewhere where we have 10 half-baked in-house versions of everything. It's an absolute nightmare. Early on in my time here I asked in Slack what our solution was for persisting data and got literally 7 different answers, and they were all bad.

It doesn't help that due to our weird processes, getting libraries added to the target platform is kind of a pain, but on top of that I think everyone just tries to write their own poo poo for a laugh. It's a scientific research facility, a very academic environment with very little process where everyone just kind does whatever they want a lot of the time. Our codebase is an insane labyrinth.

RandomBlue
Dec 30, 2012

hay guys!


Biscuit Hider

chippy posted:

I work somewhere where we have 10 half-baked in-house versions of everything. It's an absolute nightmare. Early on in my time here I asked in Slack what our solution was for persisting data and got literally 7 different answers, and they were all bad.

It doesn't help that due to our weird processes, getting libraries added to the target platform is kind of a pain, but on top of that I think everyone just tries to write their own poo poo for a laugh. It's a scientific research facility, a very academic environment with very little process where everyone just kind does whatever they want a lot of the time. Our codebase is an insane labyrinth.

The worst one I ran into was someone rolling their own loving crypto and they got extremely mad when I told them they needed to be using one of the standard libraries, ESPECIALLY for crypto. They took that to mean I thought they were incompetent, which they were but that had nothing to do with whether or not I thought they could write a crypto library on their own.

IIRC it was a step above ROT13.

This was in the mid 2000's and it was a .NET app, AES (and several other ciphers of course) were built into the framework and easy to use.

chippy
Aug 16, 2006

OK I DON'T GET IT

RandomBlue posted:

The worst one I ran into was someone rolling their own loving crypto and they got extremely mad when I told them they needed to be using one of the standard libraries, ESPECIALLY for crypto. They took that to mean I thought they were incompetent, which they were but that had nothing to do with whether or not I thought they could write a crypto library on their own.

IIRC it was a step above ROT13.

This was in the mid 2000's and it was a .NET app, AES (and several other ciphers of course) were built into the framework and easy to use.

That seems to be the thing that people try to do themselves an alarming amount of the time. I worked on a website once that the client had built a good amount of themselves, including some home-rolled crypto and they wouldn't let me touch it.

Che Delilas
Nov 23, 2009
FREE TIBET WEED

chippy posted:

That seems to be the thing that people try to do themselves an alarming amount of the time. I worked on a website once that the client had built a good amount of themselves, including some home-rolled crypto and they wouldn't let me touch it.

I wouldn't want to touch home-rolled crypto with a ten-foot pole.

Data Graham
Dec 28, 2009

📈📊🍪😋



chippy posted:

That seems to be the thing that people try to do themselves an alarming amount of the time. I worked on a website once that the client had built a good amount of themselves, including some home-rolled crypto and they wouldn't let me touch it.

Who among us has not had this experience.

Some dunning-kruger enthusiast writing his own ColdFusion password hashing algo that is "secure" because it calls a series of obscurely-named functions in various different files named after characters from his favorite book so it will be impossible for a hacker to untangle

"Don't use a standard crypto library, that's just what they'd be expecting"

chippy
Aug 16, 2006

OK I DON'T GET IT

Che Delilas posted:

I wouldn't want to touch home-rolled crypto with a ten-foot pole.

I mean I only wanted to teach it long enough to yeet it firmly out the window so I could replace it with something sane.

smackfu
Jun 7, 2004

Literally had a discussion with a project tech lead that had both of these lines:

“Oh we don’t use any frameworks. If we need a common piece of code we write it in-house.”

And

“It takes engineers a long time to get up to speed on our project.”

Che Delilas
Nov 23, 2009
FREE TIBET WEED

chippy posted:

I mean I only wanted to teach it long enough to yeet it firmly out the window so I could replace it with something sane.

That's fair, I've stayed so far away from this part of development that I'm skittish of messing with it at all. But there's always a first time, and someone has to do the responsible thing.

Paul MaudDib
May 3, 2006

TEAM NVIDIA:
FORUM POLICE
is there a reasonable turnkey solution for handling user identity in web services? Something like LDAP or Shibboleth seems overkill but maybe there's some docker containers that get you pretty much there? Or on the shallower side, is there some "creates+inserts its schema and you just hook into it" library?

I suppose you could hook into google auth or some other federated identity provider as well.

Sagacity
May 2, 2003
Hopefully my epitaph will be funnier than my custom title.
Keycloak is pretty nice for that.

Paul MaudDib
May 3, 2006

TEAM NVIDIA:
FORUM POLICE
and sorry, to be clear I'm looking for solutions for small hobby projects, not big enterprise-y software. But I also don't see a reason to reinvent the wheel either if there's a library or service or whatever I can punt to and just hook into something that mostly does what I want.

I've done Shibboleth and Keycloak on various other work projects (code from other companies) and it was a pain because even the authors didn't have it set up quite right and reverse-engineering it after the fact was painful (COVID hit and I largely handed that off to another dev so I don't know where things landed). But it may be easier from scratch / if you don't try to push a ton of business logic about permissioning into the auth layer.

I'm not saying no entirely, just that's a pretty complex can of worms and I was wondering if there's anything simpler I could do. But yeah that's broadly the kind of thing I'm thinking I guess, or libraries, etc.

Sagacity
May 2, 2003
Hopefully my epitaph will be funnier than my custom title.
Ah, fair enough. In that case maybe something more embedded like pac4j could be useful?

icantfindaname
Jul 1, 2008


I’m trying to get JOGL to work in intellij and this tutorial code

https://jogamp.org/wiki/index.php?title=Using_JOGL_in_AWT_SWT_and_Swing

code:
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.GLProfile;
import com.jogamp.opengl.GLCapabilities;
import com.jogamp.opengl.awt.GLCanvas;

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * A minimal program that draws with JOGL in an AWT Frame.
 *
 * @author Wade Walker
 */
public class OneTriangleAWT {

    public static void main( String [] args ) {
        GLProfile glprofile = GLProfile.getDefault();
        GLCapabilities glcapabilities = new GLCapabilities( glprofile );
        final GLCanvas glcanvas = new GLCanvas( glcapabilities );

        glcanvas.addGLEventListener( new GLEventListener() {
            
            @Override
            public void reshape( GLAutoDrawable glautodrawable, int x, int y, int width, int height ) {
                OneTriangle.setup( glautodrawable.getGL().getGL2(), width, height );
            }
            
            @Override
            public void init( GLAutoDrawable glautodrawable ) {
            }
            
            @Override
            public void dispose( GLAutoDrawable glautodrawable ) {
            }
            
            @Override
            public void display( GLAutoDrawable glautodrawable ) {
                OneTriangle.render( glautodrawable.getGL().getGL2(), glautodrawable.getSurfaceWidth(), glautodrawable.getSurfaceHeight() );
            }
        });

        final Frame frame = new Frame( "One Triangle AWT" );
        frame.add( glcanvas );
        frame.addWindowListener( new WindowAdapter() {
            public void windowClosing( WindowEvent windowevent ) {
                frame.remove( glcanvas );
                frame.dispose();
                System.exit( 0 );
            }
        });

        frame.setSize( 640, 480 );
        frame.setVisible( true );
    }
}
It compiles and runs with OpenJDK 17 but throws an ArrayIndexOutOfBounds exception, ultimately at the frame.setvisible(true) line. Commenting it out, or changing true to false, eliminates the exception. What is the problem? Posting from my phone, so I can’t paste the full stack trace easily, but can if it’s helpful

Edit: It works in OpenJDK 11, turns out. How do you change it to work in the current one?

icantfindaname fucked around with this message at 21:35 on Mar 13, 2022

Esran
Apr 28, 2008
Since the sample code should work out of the box, and it works on Java 11 and not 17, I think it's probably due to JOGL not being completely Java 17 compatible yet. You're more likely to get help from the JOGL devs at https://forum.jogamp.org/jogl-f782158.html, this thread seems to be discussing it https://forum.jogamp.org/JOGL-2-4-and-Java-17-report-td4041572.html.

One of the changes in Java 17 that I think is likely to affect them is https://openjdk.java.net/jeps/403, which forbids access to internal JDK classes unless you add extra JVM flags at compile time and run time.

hooah
Feb 6, 2006
WTF?
I'm trying to find the source repository for an Apache library (doxia-site-renderer), but am not having any luck. It's apparently not on GitHub. I thought Maven Central or MVN Repository had links to the code repositories for libraries, but either I was mistaken or whichever site removed it. Is there some other reliable way to find what I'm looking for? (This is assuming it's an open-source library, which being Apache I'd assume would be the case.)

necrotic
Aug 2, 2005
I owe my brother big time for this!
https://github.com/apache/maven-doxia-sitetools/tree/master/doxia-site-renderer

This one?

hooah
Feb 6, 2006
WTF?

How did you find that??

necrotic
Aug 2, 2005
I owe my brother big time for this!
I googled and it was right there.

fletcher
Jun 27, 2003

ken park is my favorite movie

Cybernetic Crumb
Our shop currently uses Sonarqube for quality gate, static analysis, and code coverage metrics. We are interested in having an easy way to see coverage of unit tests, integration tests, and automated tests (selenium, api automation, etc). There doesn't seem to be a good way to do this though, other than having projects duplicated. Unfortunately the licensing is based on # of lines of code, so that makes having duplicate projects rather problematic. So now we're having to consider switching to the free version of Sonarqube and using a free plugin that supports branch analysis to do this, which is unfortunate because Sonarqube is a cool tool and they deserve some $. Anybody know of a better way to do this?

Twerk from Home
Jan 17, 2009

This avatar brought to you by the 'save our dead gay forums' foundation.
I'd appreciate some guidance about throughput-oriented thread scaling with the Parallel GC. We've got some Java batch processing tools that have no latency sensitivity, and we care a lot about throughput per CPU-hour more than throughput per wall hour. We're using a job scheduler that is not limiting process CPU consumption with cgroups or anything similar, but all of the tools take number of worker threads for them to use as an argument anyway. Based on previous testing, we run jobs with 4-16 threads, as some of them are known to scale much worse with threads, so we'll just do 4 threads with more processes at once.

I don't know working set size for all of these. We have more RAM than we need for these jobs because some other genomic tools are incredibly memory hungry, so for most of these I use a 31GB heap, although they'd probably run happily in 8GB.

Our compute nodes range in size from 64 threads to 112 threads per node at this time. We're using Java 17 for tools that don't need Spark, and Java 8 for tools that do need Spark.

I would like to know a decent place to start testing things in our own environment to improve the situation. My baseline assumptions are:
  • Parallel GC is going to be more CPU throughput efficient than G1, or especially newer lower-pause GCs.
  • Parallel GC multithreading will scale non-linearly with the number threads doing GC, so I certainly want to limit it to a set number that is less than the total system
  • Running much larger heaps than these jobs actually need will result in greater total throughput.
  • Keeping heap less than 32GB will still enable compressed OOPs, which should help with memory / cache pressure a tiny bit.

I'm in new-to-me territory, because most of my previous Java experience is various types of web or network service where we cared a LOT about latency, but for big batch processing it doesn't matter at all.

I did find a paper about this that covers a couple of the tools we're using: https://www.researchgate.net/publication/337114965_Recommendations_for_performance_optimizations_when_using_GATK38_and_GATK4, but it mentions that they suggest users do analysis themselves, after seeing performance regressions with 4-16 Parallel GC threads on 40C Skylake nodes, and their overall conclusions are pretty bizarre, recommending either 2 or 20 Parallel GC threads.

What else am I missing for throughput-optimized Java?

Paul MaudDib
May 3, 2006

TEAM NVIDIA:
FORUM POLICE
You may already be ahead of me and asking for two different answers, but after reading your first paragraph I would strongly implore you to break the latency-sensitive jobs into a second service with a separate JVM/GC from the batch tasks. Then you can tune those things separately.

With throughput oriented tasks make sure you’re using stateless objects if you’re using an ORM or similar, or make sure you are flushing your session cache at regular intervals at least. Throughput doesn’t mean every object sticks around forever, actually a lot of batch processing tasks have very short object life because they go out of data/jpa cache very quickly and are never touched again. That means they’re often pruned in the Eden memory generation. Object types that are sticking around and accumulating during a batch task (you can measure this with JMX) are a code smell for a possible dangling reference that is preventing GC.

Make sure you understand that eden/gen1/gen2/survivor state model, or whatever the cool kid JVMs are doing nowadays.

Methanar
Sep 26, 2013

by the sex ghost
Java is beginner hostile as gently caress for actually contributing to a substantial existing project. How does anybody use this garbage. Golang was infinitely easier to pick up and immediately become useful with. Even the kubernetes source code was less abstract than this BS.

I'm sure I'm just getting bogged down into boilerplate and dependency injection design pattern bullshit, but this is just a giant cliff to even get started. Yeah sure whatever I can just copy paste existing code and change the little bits and pieces to be what I want eventually, but I don't actually understand what I'm doing. I hate trusting magic. I still don't know how Maven works.

Overall not enjoying my java introduction experience.

Methanar fucked around with this message at 07:14 on Jun 4, 2022

Esran
Apr 28, 2008
I think that depends on the project and isn't a language-wide thing. Some projects are nice and straightforward, and you can go find the main method and read your way in from there. Others use frameworks like Spring, meaning you have to understand Spring or the whole thing just looks like magic. That type of project is very beginner unfriendly.

Regarding how Maven works, I think a decent way to understand it is that Maven is largely based on conventions, so there's a lot of configuration that isn't visible unless you override it in your pom.xml. For example, Maven "knows about" some standard directories it will look for code in. See https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html.

Maven builds are made up of some fixed phases that run in a fixed order, see https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference. You can run these phases from the terminal by doing "mvn phaseName". The phases are preconfigured to do certain things, e.g. compiling the Java files present in the standard directories. Individual builds can then adjust what the phases do in the pom.xml if they need something else. This means that most pom files don't contain very much customization, because a lot of projects fit into the standard phases. This also means Maven builds tend to be much more uniform across projects than builds defined in other build tools. The default build behaviors can be found on the Maven site, and are a bit of a learning cliff, but since they are unlikely to change between projects, you only have to learn them once.

I think the other thing to know about Maven is that it's essentially a plugin runner. Most of the things done by a Maven build are done by plugins, which are hooked to the build phases, either by default or explicitly in the pom.xml. So when Maven runs the compile phase, it will by default invoke the compiler plugin https://maven.apache.org/plugins/maven-compiler-plugin/, which compiles the code. Each plugin can be configured in the pom.xml if you need it to do something other than what it's doing.

RandomBlue
Dec 30, 2012

hay guys!


Biscuit Hider
Maven is just old garbage that's too painful to migrate away from, so everybody keeps using it.

loving huge XML config files in the TYOOL 2022.

asur
Dec 28, 2012
No idea about Maven, but the rest of that sounds like badly written Java. I hadn't used Java since college and was able to jump back in with minimal effort. Golang wasn't bad either though it's a quirky language that is annoyingly similar to C but not quite similar enough.

RandomBlue
Dec 30, 2012

hay guys!


Biscuit Hider

Methanar posted:

Java is beginner hostile as gently caress for actually contributing to a substantial existing project. How does anybody use this garbage. Golang was infinitely easier to pick up and immediately become useful with. Even the kubernetes source code was less abstract than this BS.

I'm sure I'm just getting bogged down into boilerplate and dependency injection design pattern bullshit, but this is just a giant cliff to even get started. Yeah sure whatever I can just copy paste existing code and change the little bits and pieces to be what I want eventually, but I don't actually understand what I'm doing. I hate trusting magic. I still don't know how Maven works.

Overall not enjoying my java introduction experience.

DI in Java & Spring isn't really that different from other similar languages like C#. Spring is a huge freaking framework though so yeah it's going to take a while to learn and fully understand but you'll have that problem with any big framework that's new to you unless it's a clone of something you've used before or designed to be similar to one.

Basic DI in Spring is annotating a class `@Component` or `@Service` or adding a `@Bean` method that creates the needed type in a configuration class marked with `@Configuration` and the either having a private property annotated `@Inject` to inject an instance or a constructor with arguments that get automatically injected when the class in instantiated the correct way (via injection or manual wiring).

From what I understand Java is considered to be one of the easier languages to learn.

As the other posted said it sounds like the problem might be the specific projects you're looking at or you're just used to drastically different languages.

If you're serious about learning Java, Baeldung has really good free tutorials that are short and concise:

https://www.baeldung.com/start-here
https://www.baeldung.com/java-tutorial
https://www.baeldung.com/spring-dependency-injection

RandomBlue fucked around with this message at 18:51 on Jun 4, 2022

Sagacity
May 2, 2003
Hopefully my epitaph will be funnier than my custom title.

RandomBlue posted:

Maven is just old garbage that's too painful to migrate away from, so everybody keeps using it.

loving huge XML config files in the TYOOL 2022.
Uh, no. Gradle has been out for a long time but people don't want to migrate to something that's extremely inscrutable and Turing complete.

People haven't migrated away from Maven because it works fine and the whole "XML bad" meme doesn't affect the general public.

I assume you'd be promoting yaml next

RandomBlue
Dec 30, 2012

hay guys!


Biscuit Hider

Sagacity posted:

Uh, no. Gradle has been out for a long time but people don't want to migrate to something that's extremely inscrutable and Turing complete.

People haven't migrated away from Maven because it works fine and the whole "XML bad" meme doesn't affect the general public.

I assume you'd be promoting yaml next

Yup. Vastly prefer YAML over XML. Is it the correct choice for everything? Probably not, no. Is it much easier to both read and write and capable of being used for most config files? Yes.

For structured data transfer I prefer JSON over XML any day. But again it's not the best solution for every situation, but it's good enough for most and well understood and used almost universally at this point.

RandomBlue fucked around with this message at 19:37 on Jun 4, 2022

RandomBlue
Dec 30, 2012

hay guys!


Biscuit Hider

Sagacity posted:

Uh, no. Gradle has been out for a long time but people don't want to migrate to something that's extremely inscrutable and Turing complete.

Gradle is inscrutable but Maven is not, lol. OK.

I've only used Gradle in a couple personal projects but it was very easy to set up and use. Professionally I work with maven daily and I understand it just fine but it sucks IMO.

Esran
Apr 28, 2008
Gradle and Maven make different tradeoffs, I don't think Gradle is strictly better in all cases. The "Maven uses XML, ew" argument isn't even true anymore, since you can write Maven poms in YAML and other languages as well via https://github.com/takari/polyglot-maven.

Regarding whether Gradle or Maven is more inscrutable, I think you could lean either way as a developer, but I think Maven definitely has an advantage when it comes to tools understanding the build. It is a lot easier for IDEs to integrate with Maven than Gradle, because understanding a Maven build is a matter of parsing an XML file, while understanding a Gradle files means executing a Groovy script, which contains both declarative and imperative parts, and trying to understand what it does.

I think the main issue with Maven is that I think there are better alternatives these days, but I'd say the same is true of Gradle. I think the build model used by tools like Bazel or Pants is both easier to understand for a beginner, and more robust for large projects.

In Bazel the build is structured into a set of targets, a la Makefiles. All targets must declare exactly their inputs and outputs and the build is sandboxed to ensure no undeclared dependencies to avoid "it works on my machine". Because there are no "it works on my machine" issues, build results can be cached with high granularity and even shared across hosts. The declarative parts of the build files (the structure of the project) is separated from the imperative parts (e.g. code to invoke the compiler), which makes IDE integrations easier.

Bazel is much less magical than either Maven or Gradle, since you have to tell it everything it should do. It's more work to set up and maintain, but I feel like the resulting build is easier to understand, and for large codebases it performs better too. Largely never having to do a "make clean" is pretty nice as well.

DELETE CASCADE
Oct 25, 2017

i haven't washed my penis since i jerked it to a phtotograph of george w. bush in 2003
yaml is poo poo, gradle is bad. xml is just ok. but maven... maven is GOOD

Tuxide
Mar 7, 2010
Lipstick Apathy
I still use Maven, instead of Gradle, for my Java projects because of plugins. Maven plugins don't work in Gradle out of the box--they have to be ported. For example, in wake of Log4Shell, I use OWASP Dependency-Check and Maven Enforcer Plugin in my own projects, to keep bad dependencies out of my builds. OWASP Dependency-Check has a Gradle Version. There are Maven Enforcer-like plugins made for Gradle, but the ones I'm aware of don't really work for my purpose because they don't check transitive dependencies.

If one tool works fine for your project, there's generally no reason to switch to another mid-project.

CPColin
Sep 9, 2003

Big ol' smile.

Tuxide posted:

If one tool works fine for your project, there's generally no reason to switch to another mid-project.

This is why I'm still on all my projects

Hippie Hedgehog
Feb 19, 2007

Ever cuddled a hedgehog?

Esran posted:

Gradle and Maven make different tradeoffs, I don't think Gradle is strictly better in all cases. The "Maven uses XML, ew" argument isn't even true anymore, since you can write Maven poms in YAML and other languages as well via https://github.com/takari/polyglot-maven.

Regarding whether Gradle or Maven is more inscrutable, I think you could lean either way as a developer, but I think Maven definitely has an advantage when it comes to tools understanding the build. It is a lot easier for IDEs to integrate with Maven than Gradle, because understanding a Maven build is a matter of parsing an XML file, while understanding a Gradle files means executing a Groovy script, which contains both declarative and imperative parts, and trying to understand what it does.

I think the main issue with Maven is that I think there are better alternatives these days, but I'd say the same is true of Gradle. I think the build model used by tools like Bazel or Pants is both easier to understand for a beginner, and more robust for large projects.

In Bazel the build is structured into a set of targets, a la Makefiles. All targets must declare exactly their inputs and outputs and the build is sandboxed to ensure no undeclared dependencies to avoid "it works on my machine". Because there are no "it works on my machine" issues, build results can be cached with high granularity and even shared across hosts. The declarative parts of the build files (the structure of the project) is separated from the imperative parts (e.g. code to invoke the compiler), which makes IDE integrations easier.

Bazel is much less magical than either Maven or Gradle, since you have to tell it everything it should do. It's more work to set up and maintain, but I feel like the resulting build is easier to understand, and for large codebases it performs better too. Largely never having to do a "make clean" is pretty nice as well.

To be fair, Gradle has several of those good properties that you like in Bazel, like reproducible builds and great staleness checks. Incremental builds are great, too. Nobody ever does “gradlew clean” unless they came from Maven and didn’t learn to trust Gradle yet.

That said, I agree with all your argument against Gradle, too. I’m fine working with Maven’s quirks instead, because the average corporate Gradle build is just too complex. Too many possibilities.

Zorro KingOfEngland
May 7, 2008

Java was my first language I used professionally, and as such I compare most new things I learn to Java. In that regard, I view Maven as a build and dependency management system that is second to none.

Conventions mean A TON when you're moving through new projects quickly. Knowing where the tests are located, knowing exactly how and where the build will be completed is mind blowingly useful. Having your build tool be opinionated is a good thing, as it means all projects you deal with will behave similarly.

Complaining about having to deal with XML when the tool itself is incredible is missing the forest for the trees. Even then you can use other languages as pointed out earlier.

Adbot
ADBOT LOVES YOU

DELETE CASCADE
Oct 25, 2017

i haven't washed my penis since i jerked it to a phtotograph of george w. bush in 2003
"i just love having to write more awful code in a lovely dsl just to get my actual code, also awful, to compile and run" - no one, ever

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply