{"id":25777033,"url":"https://github.com/forax/pro","last_synced_at":"2025-12-27T05:00:07.866Z","repository":{"id":85458527,"uuid":"74622126","full_name":"forax/pro","owner":"forax","description":"A Java build tool that works seamlessly with modules","archived":false,"fork":false,"pushed_at":"2021-02-05T05:08:20.000Z","size":21048,"stargazers_count":103,"open_issues_count":7,"forks_count":15,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-02-27T06:07:06.736Z","etag":null,"topics":["build-tool","java","module"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/forax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-23T23:34:31.000Z","updated_at":"2024-07-09T08:21:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"61120262-6a39-4c16-aa1d-b0e6faa7964e","html_url":"https://github.com/forax/pro","commit_stats":null,"previous_names":[],"tags_count":103,"template":false,"template_full_name":null,"purl":"pkg:github/forax/pro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forax%2Fpro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forax%2Fpro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forax%2Fpro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forax%2Fpro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/forax","download_url":"https://codeload.github.com/forax/pro/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forax%2Fpro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28072674,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build-tool","java","module"],"created_at":"2025-02-27T06:01:34.689Z","updated_at":"2025-12-27T05:00:07.856Z","avatar_url":"https://github.com/forax.png","language":"Java","readme":"[![Linux build status](https://api.travis-ci.org/forax/pro.svg?branch=master)](https://travis-ci.org/forax/pro) [![Windows build status](https://ci.appveyor.com/api/projects/status/fdsju4o5390vn282?svg=true)](https://ci.appveyor.com/project/forax/pro)\n\n# pro\nA Java build tool that works seamlessly with modules \n\n\u003e No need to be a maven to be able to use a build tool \n\n\n# rationale\nWith the introduction of modules in Java 9, creating modules/jars is easier and\nnew applications will tend to have many more, smaller modules than before.\nThe build model of Maven is not well suited to describe this new world.\n\n\n# principles\n\n  - **pro**grammatic API first\n  - use [convention](https://github.com/forax/pro/blob/master/src/main/java/com.github.forax.pro.plugin.convention/com/github/forax/pro/plugin/convention/ConventionPlugin.java#L17) over configuration\n  - stateless [plugins](https://github.com/forax/pro/blob/master/src/main/java/com.github.forax.pro.api/com/github/forax/pro/api/Plugin.java) \n  - separate configuration time where configuration is [mutable](https://github.com/forax/pro/blob/master/src/main/java/com.github.forax.pro.api/com/github/forax/pro/api/MutableConfig.java) and build time where configuration is [immutable](https://github.com/forax/pro/blob/master/src/main/java/com.github.forax.pro.api/com/github/forax/pro/api/Config.java)\n  - external dependencies are in plain sight (in the `deps` folder)\n\n\n# anatomy of a build.pro\n\npro uses a file named `build.pro` as build script, which is composed of two parts, the configuration part and the run part.\nIn the configuration part, you can set the properties of a specific plugin, by example, this how to set the release version of the source to Java 11 for the compiler\n```\n  compiler.sourceRelease(11)\n```\nyou can chain the calls, by example to set the source release and use the preview features\n```\n  compiler.\n    sourceRelease(11).\n    enablePreview(true)\n```\nNote: pro uses jshell to parse the build.pro, this tool is line oriented so you have to put the dot '.' at the end of\n      the line to ask for the parsing of the next line.\n      \nThen you have to call `run()` with all the commands you want to execute, by example,\n```\n  run(compiler, packager)\n```\nto run the `compiler` on the sources and uses the `packager` to create a jar.\n\nHere is a list of the main plugins\n - `resolver`  use Maven artifact coordinates to download the dependencies \n - `modulefixer` patch the artifacts downloaded to make them fully compatible with the module-path \n - `compiler` compile the sources and the tests\n - `tester` run the JUnit 5 tests\n - `docer` generate the javadoc\n - `runner` run the `main()` of the main class of the main module.\n\n\n\n# getting started\n  \nTo create the layout of a minimal project, you can use the option `scaffold`\n```\n  mkdir myproject\n  cd myproject\n  pro scaffold \n```\n\n`scaffold` will ask for a module name (a name in reverse DNS form like a kind of root package) and will generate a skeleton of the folders.\n\nThen you can run pro to build your project\n```\n  pro\n```\n\n\n\n# demo\nThere is a small demo in the github project [pro-demo](https://github.com/forax/pro-demo/).\n\n\n\n\n# build instructions\nTo compile and build pro, run:\n```\nbuild.sh\n```\npro will bootstrap itself.\n\nTo build pro you need the [jdk11](http://jdk.java.net/11/) or a more recent version,\nyou may have to change the value of the variable JAVA_HOME at the start of the script build.sh.\n\nOnce built, you have an image of the tool in target/pro.\nThis image embeds its own small JDK: no need to install anything Java-related to be able to build your application.\nObviously, you will need a JDK to run your application. \n","funding_links":[],"categories":["构建工具"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforax%2Fpro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fforax%2Fpro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforax%2Fpro/lists"}