{"id":18342605,"url":"https://github.com/bmuschko/rules_java_war","last_synced_at":"2025-04-06T07:32:15.039Z","repository":{"id":45995310,"uuid":"194936663","full_name":"bmuschko/rules_java_war","owner":"bmuschko","description":"Bazel rules for generating a Java Web Archive (WAR).","archived":false,"fork":false,"pushed_at":"2021-11-22T04:22:55.000Z","size":24,"stargazers_count":9,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-21T19:01:31.492Z","etag":null,"topics":["bazel","bazel-rules","java","javaee"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bmuschko.png","metadata":{"files":{"readme":"README.adoc","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}},"created_at":"2019-07-02T21:22:43.000Z","updated_at":"2024-10-01T20:36:10.000Z","dependencies_parsed_at":"2022-08-29T20:41:25.470Z","dependency_job_id":null,"html_url":"https://github.com/bmuschko/rules_java_war","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmuschko%2Frules_java_war","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmuschko%2Frules_java_war/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmuschko%2Frules_java_war/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmuschko%2Frules_java_war/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bmuschko","download_url":"https://codeload.github.com/bmuschko/rules_java_war/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247450418,"owners_count":20940920,"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","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":["bazel","bazel-rules","java","javaee"],"created_at":"2024-11-05T20:31:43.413Z","updated_at":"2025-04-06T07:32:14.625Z","avatar_url":"https://github.com/bmuschko.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"= Bazel rules for creating a Java Web Archive (WAR) image:https://travis-ci.org/bmuschko/rules_java_war.svg?branch=master[\"Build Status\", link=\"https://travis-ci.org/bmuschko/rules_java_war\"]\n\n== Overview\n\nThe rules provide a way for creating a https://docs.oracle.com/javaee/6/tutorial/doc/bnadx.html[Java Web Archive (WAR)]. The project is compatible with the standard https://github.com/bazelbuild/rules_java[rules_java] and https://github.com/bazelbuild/rules_jvm_external[rules_jvm_external].\n\n== Setup\n\nThe easiest way to use the rules is by adding the following to your `WORKSPACE` file:\n\n[source,python]\n----\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\n\nRULES_JAVA_WAR_TAG = \"0.1.0\"\n\nhttp_archive(\n    name = \"io_bazel_rules_java_war\",\n    strip_prefix = \"rules_java_war-%s\" % RULES_JAVA_WAR_TAG,\n    url = \"https://github.com/bmuschko/rules_java_war/archive/%s.tar.gz\" % RULES_JAVA_WAR_TAG,\n    sha256 = \"38011f979713c4aefd43ab56675ce4c6c14bc949b128c3a303f1f57ebe4bfeac\",\n)\n----\n\n== Basic Example\n\nSuppose you are following the typical directory structure for a Java web application:\n\n----\n.\n├── BUILD\n├── WORKSPACE\n└── src\n    └── main\n        ├── java\n        │   └── com\n        │       └── bmuschko\n        │           └── web\n        │               └── SimpleServlet.java\n        └── webapp\n            ├── WEB-INF\n            │   └── web.xml\n            ├── css\n            │   └── style.css\n            ├── index.html\n            └── js\n                └── dynamic.js\n----\n\nTo build the WAR file for the application, a `BUILD` on the root level could look as follows:\n\n[source,python]\n----\nload(\"@io_bazel_rules_java_war//java_war:defs.bzl\", \"java_war\")\n\njava_war(\n    name = \"web-app\",\n    java_srcs = glob([\"src/main/java/**/*.java\"]),\n    deps = [\n        \"@maven//:org_mortbay_jetty_servlet_api\",\n        \"@maven//:ch_qos_logback_logback_classic\",\n    ],\n)\n----\n\nUnder the hood, the macro named `java_war` will generate the `java_library` of the application and then include it as dependency for the WAR file.\n\n[source,bash]\n----\n$ bazel build //:web-app\nINFO: Analyzed target //:web-app (17 packages loaded, 531 targets configured).\nINFO: Found 1 target...\nTarget //:web-app up-to-date:\nbazel-bin/web-app.war\nINFO: Elapsed time: 7.440s, Critical Path: 5.30s\nINFO: 4 processes: 3 darwin-sandbox, 1 worker.\nINFO: Build completed successfully, 5 total actions\n----\n\nThe result WAR file contains the content shown below. The rule will include the transitive closure of runtime dependencies. The dependency `org_mortbay_jetty_servlet_api` was declared as \"compile-only\" dependency and therefore isn't included.\n\n[source,bash]\n----\n$ cd bazel-bin\n$ jar -tf web-app.war\nWEB-INF/web.xml\ncss/style.css\nindex.html\njs/dynamic.js\nWEB-INF/lib/liblibextdeps.jar\nWEB-INF/lib/logback-classic-1.1.2.jar\nWEB-INF/lib/slf4j-api-1.7.6.jar\nWEB-INF/lib/logback-core-1.1.2.jar\n----\n\n== API\n\n=== war\n\n++++\n\u003cpre\u003e\nwar(\u003ca href=\"#war-name\"\u003ename\u003c/a\u003e, \u003ca href=\"#war-compression\"\u003ecompression\u003c/a\u003e, \u003ca href=\"#war-deps\"\u003edeps\u003c/a\u003e, \u003ca href=\"#war-web_app_root\"\u003eweb_app_root\u003c/a\u003e, \u003ca href=\"#war-web_app_srcs\"\u003eweb_app_srcs\u003c/a\u003e)\n\u003c/pre\u003e\n++++\n\nRule for generating a Java Web Archive (WAR).\n\n\n==== Attributes\n\n++++\n\u003ctable class=\"params-table\"\u003e\n  \u003ccolgroup\u003e\n    \u003ccol class=\"col-param\" /\u003e\n    \u003ccol class=\"col-description\" /\u003e\n  \u003c/colgroup\u003e\n  \u003ctbody\u003e\n    \u003ctr id=\"war-name\"\u003e\n      \u003ctd\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003ca href=\"https://bazel.build/docs/build-ref.html#name\"\u003eName\u003c/a\u003e; required\n        \u003cp\u003e\n          A unique name for this target.\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr id=\"war-compression\"\u003e\n      \u003ctd\u003e\u003ccode\u003ecompression\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        Boolean; required\n        \u003cp\u003e\n          Enables compression for the WAR file.\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr id=\"war-deps\"\u003e\n      \u003ctd\u003e\u003ccode\u003edeps\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003ca href=\"https://bazel.build/docs/build-ref.html#labels\"\u003eList of labels\u003c/a\u003e; optional\n        \u003cp\u003e\n          Dependencies for this target.\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr id=\"war-web_app_root\"\u003e\n      \u003ctd\u003e\u003ccode\u003eweb_app_root\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        String; required\n        \u003cp\u003e\n          Root directory containing web application files (e.g. web.xml, CSS or JavaScript files).\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr id=\"war-web_app_srcs\"\u003e\n      \u003ctd\u003e\u003ccode\u003eweb_app_srcs\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003ca href=\"https://bazel.build/docs/build-ref.html#labels\"\u003eList of labels\u003c/a\u003e; required\n        \u003cp\u003e\n          Source files to be included fromt the web application root directory.\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n++++\n\n=== java_war\n\n++++\n\u003cpre\u003e\njava_war(\u003ca href=\"#java_war-name\"\u003ename\u003c/a\u003e, \u003ca href=\"#java_war-web_app_dir\"\u003eweb_app_dir\u003c/a\u003e, \u003ca href=\"#java_war-java_srcs\"\u003ejava_srcs\u003c/a\u003e, \u003ca href=\"#java_war-deps\"\u003edeps\u003c/a\u003e, \u003ca href=\"#java_war-compression\"\u003ecompression\u003c/a\u003e, \u003ca href=\"#java_war-kwargs\"\u003ekwargs\u003c/a\u003e)\n\u003c/pre\u003e\n++++\n\nCreates a Java Web Archive (WAR).\n\nAutomatically creates a Java library and bundles it with the web application files and any dependencies.\nFor more information on the internal structure of a WAR file, see the https://docs.oracle.com/javaee/6/tutorial/doc/bnadx.html[official documentation].\n\n\n==== Parameters\n\n++++\n\u003ctable class=\"params-table\"\u003e\n  \u003ccolgroup\u003e\n    \u003ccol class=\"col-param\" /\u003e\n    \u003ccol class=\"col-description\" /\u003e\n  \u003c/colgroup\u003e\n  \u003ctbody\u003e\n    \u003ctr id=\"java_war-name\"\u003e\n      \u003ctd\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        required.\n        \u003cp\u003e\n          A unique name for this rule.\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr id=\"java_war-web_app_dir\"\u003e\n      \u003ctd\u003e\u003ccode\u003eweb_app_dir\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        optional. default is \u003ccode\u003e\"src/main/webapp\"\u003c/code\u003e\n        \u003cp\u003e\n          The root web application directory.\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr id=\"java_war-java_srcs\"\u003e\n      \u003ctd\u003e\u003ccode\u003ejava_srcs\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        optional. default is \u003ccode\u003e[]\u003c/code\u003e\n        \u003cp\u003e\n          Java source files for compilation.\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr id=\"java_war-deps\"\u003e\n      \u003ctd\u003e\u003ccode\u003edeps\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        optional. default is \u003ccode\u003e[]\u003c/code\u003e\n        \u003cp\u003e\n          Dependencies for this java_library target.\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr id=\"java_war-compression\"\u003e\n      \u003ctd\u003e\u003ccode\u003ecompression\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        optional. default is \u003ccode\u003eFalse\u003c/code\u003e\n        \u003cp\u003e\n          Enables compression for the WAR.\n        \u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr id=\"java_war-kwargs\"\u003e\n      \u003ctd\u003e\u003ccode\u003ekwargs\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        optional.\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n++++","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmuschko%2Frules_java_war","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbmuschko%2Frules_java_war","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmuschko%2Frules_java_war/lists"}