-
Notifications
You must be signed in to change notification settings - Fork 114
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP: Maven -> Gradle #81
Conversation
53caf59
to
38675b7
Compare
Just in case, sample GitHub Actions CI output can be seen here: https://github.com/vlsi/jqf/commit/38675b76e5fdf794b7a88b3e0f022753406b43d9/checks?check_suite_id=409014475 (see https://github.com/vlsi/jqf/actions) |
Ok, basic build and test works in Linux and macOS: https://github.com/vlsi/jqf/commit/527c70ea6ec01806b29afd8155ee1bc7cd0d30a0/checks?check_suite_id=409048657 It looks like there are compilation failures for afl-proxy in Windows. @rohanpadhye , am I right it never worked in Windows? |
In general, I'm glad that JQF can be built with Gradle, but I don't see why this PR needs to be merged into master. I am currently happy with Maven and do not see the need to migrate to a different build system. As you pointed out in #77, it is possible to use JQF as-it-is from a Gradle project. My understanding is that Gradle projects can pull in artifacts from Maven central pretty easily. If you wish to develop and maintain a Gradle plugin similar to the jqf-maven-plugin, your contribution is welcome. But I think JQF will stick to using Maven for its own build for now. |
Well. Gradle simplifies a lot of things, and the entry curve is very straightforward. With Maven you have to build modules (==install to Maven local repository) in the right order, otherwise, it won't work. For instance, I've recently migrated Apache JMeter (Ant -> Gradle) and Apache Calcite (Maven -> Gradle). Gradle simplifies things like "making a classpath". For instance, here's what we have in Apache Calcite:
Here's how the classpath is declared: Gradle makes With Maven you copy dependencies to Note:
Even though it is possible, I would like to highlight that Gradle has composite builds For instance, if I want to alter jqf a bit (e.g. like in #79 ), I need the following:
If JQF build was Gradle-based, then I could just launch my own build, and Gradle would pick jqf transparently. No maven local would be required. |
Thanks for all the relevant points. I agree that Gradle probably has more features and customizability than Maven, as evidenced by the fact that so many projects are making the migration. However, projects like JMeter and Calcite have a much larger community than JQF, which also fosters a better development and support network. The issue with making a large change in JQF (this includes this PR as well as suggestions such as #80) is primarily that of human resources. I am currently the only active maintainer of JQF*. The original implementation of JQF was motivated by the need for a research platform to experiment with new structure-aware fuzzing algorithms, and it has been successful at that (e.g. recent extensions using RL). While I am happy to spend time fixing bugs in JQF and making it more usable for users who would like to extend JQF (e.g. #52) , who require more control over hardcoded configs or options (e.g. #75), or to add features that will help find bugs in real systems (e.g. #25, #26), I do not currently have the bandwidth to learn how Gradle works and ensure that I can continue maintaining and supporting JQF if its build system is changed from what I am familiar with. If you would like to host and maintain a fork of JQF that uses Gradle to build and that will be in-sync with master, I would be more than happy to include a link in the README to your fork. However, unless there is a task that is currently impossible to do in the current version of JQF, I am not enthusiastic about merging this PR. * If someone more familiar with Gradle takes over the project, build, and release management, that is a different scenario. PS: 47d20a9 is a great change, and I'll be happy to merge this in isolation. Thanks! |
I see no value in that |
Thanks for publishing this PR |
This migrates the build system to Gradle.
Pros:
afl-proxy
can be built with the same toolWDYT?
Just in case, sample GitHub Actions CI output can be seen here: https://github.com/vlsi/jqf/commit/38675b76e5fdf794b7a88b3e0f022753406b43d9/checks?check_suite_id=409014475 (see https://github.com/vlsi/jqf/actions)
Note: this PR does not yet build
jqf-maven-plugin
, however, it is good enough to build all the rest jars, and publication to Maven Central should work as well.If you are not familiar with Gradle, you might https://github.com/dougborg/gdub useful.
Sample commands to try: