{"id":37026257,"url":"https://github.com/nkaaf/annotationprocessor","last_synced_at":"2026-01-14T03:03:15.007Z","repository":{"id":235604252,"uuid":"338817003","full_name":"nkaaf/AnnotationProcessor","owner":"nkaaf","description":"Easy creation and validation of annotation processors","archived":false,"fork":false,"pushed_at":"2024-07-22T20:41:36.000Z","size":116,"stargazers_count":0,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-12T02:12:56.210Z","etag":null,"topics":["annotation-processor","gradle","java","java-libraries","maven","modular","multi-release-jars"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nkaaf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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}},"created_at":"2021-02-14T13:55:56.000Z","updated_at":"2024-04-23T21:32:46.000Z","dependencies_parsed_at":"2024-04-23T23:51:44.025Z","dependency_job_id":"814159c4-f2d3-4021-b53e-3bd2502a616c","html_url":"https://github.com/nkaaf/AnnotationProcessor","commit_stats":null,"previous_names":["nkaaf/annotationprocessor"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/nkaaf/AnnotationProcessor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkaaf%2FAnnotationProcessor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkaaf%2FAnnotationProcessor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkaaf%2FAnnotationProcessor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkaaf%2FAnnotationProcessor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nkaaf","download_url":"https://codeload.github.com/nkaaf/AnnotationProcessor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nkaaf%2FAnnotationProcessor/sbom","scorecard":{"id":690062,"data":{"date":"2025-08-11","repo":{"name":"github.com/nkaaf/AnnotationProcessor","commit":"3864dc2911d23cc9232477720606c49566d84737"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/11 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: COPYING:0","Info: FSF or OSI recognized license: GNU Lesser General Public License v2.1: COPYING:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.0 not signed: https://api.github.com/repos/nkaaf/AnnotationProcessor/releases/38030235","Warn: release artifact v1.0 does not have provenance: https://api.github.com/repos/nkaaf/AnnotationProcessor/releases/38030235"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T02:07:45.716Z","repository_id":235604252,"created_at":"2025-08-22T02:07:45.716Z","updated_at":"2025-08-22T02:07:45.716Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408800,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"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":["annotation-processor","gradle","java","java-libraries","maven","modular","multi-release-jars"],"created_at":"2026-01-14T03:03:14.405Z","updated_at":"2026-01-14T03:03:14.996Z","avatar_url":"https://github.com/nkaaf.png","language":"Java","readme":"# Annotation Processor\n\n[![License](https://img.shields.io/github/license/nkaaf/AnnotationProcessor)](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt)\n\n[![DeepSource](https://deepsource.io/gh/nkaaf/AnnotationProcessor.svg/?label=active+issues\u0026show_trend=true)](https://deepsource.io/gh/nkaaf/AnnotationProcessor/?ref=repository-badge)\n[![Build Status](https://travis-ci.com/nkaaf/AnnotationProcessor.svg?branch=master)](https://travis-ci.com/nkaaf/AnnotationProcessor)\n\n[![GitHub all releases](https://img.shields.io/github/downloads/nkaaf/AnnotationProcessor/total)](https://github.com/nkaaf/AnnotationProcessor/releases)\n\n[![Maven Central](https://img.shields.io/maven-central/v/io.github.nkaaf/annotationprocessor)](https://mvnrepository.com/artifact/io.github.nkaaf/annotationprocessor)\n\n[![GitHub forks](https://img.shields.io/github/forks/nkaaf/AnnotationProcessor?style=social)](https://github.com/nkaaf/AnnotationProcessor/network/members)\n[![GitHub Repo stars](https://img.shields.io/github/stars/nkaaf/AnnotationProcessor?style=social)](https://github.com/nkaaf/AnnotationProcessor/stargazers)\n[![GitHub watchers](https://img.shields.io/github/watchers/nkaaf/AnnotationProcessor?style=social)](https://github.com/nkaaf/AnnotationProcessor/watchers)\n\n## Index\n\n- [Use Case](#use-case)\n- Usage\n    - [Build System](#build-system)\n        - [Maven](#usage-maven)\n        - [Gradle](#usage-gradle)\n    - [Java](#java)\n        - [Non-Modular](#non-modular)\n        - [Modular (Java 9+)](#modular-java-9)\n            - [Maven](#java-maven)\n            - [Gradle](#java-gradle)\n- [Developing](#developing)\n    - [The Problem with Multi-Release JARs and IDEs](#the-problem-with-multi-release-jars-and-ides)\n    - [Testing](#testing)\n        - [Needed Components](#needed-components)\n        - [Used SDKMAN! JDKs](#used-sdkman-jdks)\n        - [Used SDKMAN! Maven](#used-sdkman-maven)\n        - [Used Java Libraries](#used-java-libraries)\n- [License](#license)\n    - [Licenses of used Libraries](#licenses-of-used-libraries-and-tools)\n\n## Use Case\n\nIn case you want to create a new annotation processor, you can use the annotation \u003cstrong\u003e@AnnotationProcessor\u003c/strong\u003e,\nto automatically create the required \u003cstrong\u003ejavax.annotation.processing.Processor\u003c/strong\u003e file in the\n\u003cstrong\u003eMETA-INF/services/\u003c/strong\u003e directory at compile time.\n\n\u003e ❗ To use this properly, see how to import it into your [Build System](#build-system) and integrate it into [Java](#java) ❗\n\n**[↑ Back to Index](#index)**\n\n## Build System\n\n### \u003ca name=\"usage-maven\"\u003e\u003c/a\u003e Maven\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.nkaaf\u003c/groupId\u003e\n    \u003cartifactId\u003eannotationprocessor\u003c/artifactId\u003e\n    \u003cversion\u003e1.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n**[↑ Back to Index](#index)**\n\n### \u003ca name=\"usage-gradle\"\u003e\u003c/a\u003e Gradle\n\n```groovy\nplugins {\n    id 'java-library'\n}\n\ndependencies {\n    compileOnly 'io.github.nkaaf:annotationprocessor:1.0'\n    annotationProcessor 'io.github.nkaaf:annotationprocessor:1.0'\n}\n```\n\n**[↑ Back to Index](#index)**\n\n## Java\n\nAnnotate your annotation processor with \u003cstrong\u003e@AnnotationProcessor\u003c/strong\u003e. The processor behind this annotation\nchecks if your annotation processor is built conforming ([JSP 269](https://www.jcp.org/en/jsr/detail?id=269)). You can\neither extend your processor with \u003cstrong\u003ejavax.annotation.processing.AbstractProcessor\u003c/strong\u003e or directly implement\nit with \u003cstrong\u003ejavax.annotation.processing.Processor\u003c/strong\u003e.\n\n**[↑ Back to Index](#index)**\n\n### Non-Modular\n\nYou only need to import the dependency with your build system.\n\n\u003e [Maven Example](examples/maven/non-modular/pom.xml)\n\u003e\n\u003e [Gradle Example](examples/gradle/non-modular/build.gradle)\n\n**[↑ Back to Index](#index)**\n\n### Modular (Java 9+)\n\nYou need to add the dependencies' module in the \u003cstrong\u003emodule-info.java\u003c/strong\u003e of the desired module. In addition,\nyou need to set it up in your build system ([Maven](#java-maven)/ [Gradle](#java-gradle)).\n\n**[↑ Back to Index](#index)**\n\n#### \u003ca name=\"java-maven\"\u003e\u003c/a\u003e Maven\n\nYour module only needs to require the io.github.nkaaf.annotationprocessor module. It gets the module java.compiler\nautomatically, so you don't need it additionally for your annotation processor.\n\n```java\nmodule yourModule {\n    requires static io.github.nkaaf.annotationprocessor;\n}\n```\n\nYou need to add the dependency as an annotation path in maven-compiler-plugin.\n\n```xml\n\u003cpluin\u003e\n    \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n    \u003cartifactId\u003emaven-compiler-plugin\u003c/artifactId\u003e\n    \u003cversion\u003e3.8.1\u003c/version\u003e\n    \u003cconfiguration\u003e\n        \u003crelease\u003eJAVA_VERSION_GREATER_OR_EQUALS_9\u003c/release\u003e\n        \u003cannotationProcessorPaths\u003e\n            \u003cannotationProcessorPath\u003e\n                \u003cgroupId\u003eio.github.nkaaf\u003c/groupId\u003e\n                \u003cartifactId\u003eannotationprocessor\u003c/artifactId\u003e\n                \u003cversion\u003e1.0\u003c/version\u003e\n            \u003c/annotationProcessorPath\u003e\n        \u003c/annotationProcessorPaths\u003e\n    \u003c/configuration\u003e\n\u003c/pluin\u003e\n```\n\n\u003e [Maven Example](examples/maven/modular/pom.xml)\n\n**[↑ Back to Index](#index)**\n\n#### \u003ca name=\"java-gradle\"\u003e\u003c/a\u003e Gradle (6.4+)\n\nYour module must require the io.github.nkaaf.annotationprocessor module.\n\n\u003e ❗ It will NOT automatically get the java.compiler module (different behaviour than in Maven) ❗\n\n```java\nmodule yourModule {\n    requires static io.github.nkaaf.annotationprocessor;\n}\n```\n\nYou also need to turn on module path inference and add the release flag.\n\n\u003e ❗ You cannot use JDK 9 because the release flag causes an error with Gradle. JDK 10 causes another error with\n\u003e Gradle, but the Java 10 release flag can be used with JDK 12 and later. See the error tickets linked in example.\n\u003e But you can use the release flag 11, and a JDK 11 ❗\n\n```groovy\njava {\n    modularity.inferModulePath.set(true)\n}\n\n// \u003c Gradle 6.6\ncompileJava {\n    options.compilerArgs.addAll(['--release', '11'])\n}\n\n// \u003e= Gradle 6.6\ncompileJava {\n    options.release.set(11)\n}\n```\n\n\u003e [Gradle Example](examples/gradle/modular/build.gradle)\n\n**[↑ Back to Index](#index)**\n\n## Developing\n\nTo ensure maximum compatibility, this project must be compiled with Java 9.\n\n**[↑ Back to Index](#index)**\n\n### The Problem with Multi-Release JARs and IDEs\n\nMost IDEs do not support multi-release jars properly. The problem is that the package and class names are identical. The\nIDEs cannot compile them, even though this mechanism is clearly defined in the Maven POM.\n\n**[↑ Back to Index](#index)**\n\n### Testing\n\nThere is also a problem with the tests. There is no automatic way to change the JDKs, so that both versions of my\nannotation processor are tested. My solution is a bash script that compiles and tests the classes. It uses\n[SDKMAN!](https://sdkman.io/) and the [Junit Jupiter Engine](https://junit.org/junit5/), which is imported by\n[Maven](https://maven.apache.org/). You can easily run the [test script](src/test/test.sh) with bash from anywhere on\nyour computer. If you do not have the required Java Libraries installed in the Maven folder, the script downloads them.\nThis also applies to the JDKs with SDKMAN!. The mechanism for switching JDKs with SDKMAN! is not perfect for my purpose,\nbecause it depends on hardcoded Java versions. These can be deleted at any time in the lists of SDKMAN! without me\nnotice it.\n\n**[↑ Back to Index](#index)**\n\n#### Needed Components\n\n- [Bash](https://www.gnu.org/software/bash/)\n- [SDKMAN!](https://sdkman.io/)\n- [Maven](https://maven.apache.org/)\n\n**[↑ Back to Index](#index)**\n\n#### Used SDKMAN! JDKs\n\n- 8.0.282-zulu\n- 11.0.10-zulu\n- 15.0.2-sapmchn\n- 16.0.1-zulu\n\nAlso tested with following, at the moment not available, SDKMAN! JDKs:\n\n- 12.0.2-sapmchn\n- 13.0.2-sapmchn\n- 14.0.2-sapmchn\n- 15.0.2-zulu\n\n**[↑ Back to Index](#index)**\n\n#### Used SDKMAN! Maven\n\n- 3.8.1\n\nAlso tested with following SDKMAN! Maven Versions:\n\n- 3.6.3\n\n**[↑ Back to Index](#index)**\n\n#### Used Java Libraries\n\n- [JUnit Jupiter API 5.7.2](https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api/5.7.2)\n- [JUnit Platform Console Standalone 1.7.2](https://mvnrepository.com/artifact/org.junit.platform/junit-platform-console-standalone/1.7.2)\n  (Used in testing script for command line support)\n\n**[↑ Back to Index](#index)**\n\n## License\n\nThis Project is licensed under the GNU Lesser General Public License 2.1 or any\nlater ([LGPL 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt)).\n\n### Licenses of used Libraries and Tools\n\nThis list includes only Libraries and tools that are explicit imported/used in this project.\n\n- [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)\n    - [Maven](https://github.com/apache/maven)\n    - [Maven Compiler Plugin 3.8.1](https://github.com/apache/maven-compiler-plugin)\n    - [Maven GPG Plugin 1.6](https://github.com/apache/maven-gpg-plugin)\n    - [Maven Jar Plugin 3.2.0](https://github.com/apache/maven-jar-plugin)\n    - [Maven Javadoc Plugin 3.2.0](https://github.com/apache/maven-javadoc-plugin)\n    - [Maven Release Plugin 2.5.3](https://github.com/apache/maven-release)\n    - [Maven Source Plugin 3.2.1](https://github.com/apache/maven-source-plugin)\n    - [SDKMAN!](https://github.com/sdkman/sdkman-cli)\n\n- [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html)\n    - [Nexus Staging Maven Plugin 1.6.8](https://github.com/sonatype/nexus-maven-plugins/tree/master/staging/maven-plugin)\n\n- [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-v20.html)\n    - [JUnit Jupiter API 5.7.2](https://github.com/junit-team/junit5)\n    - [JUnit Jupiter Console Standalone 1.7.2](https://github.com/junit-team/junit5)\n\n- [GNU Lesser General Public License 3.0](http://www.gnu.org/licenses/lgpl-3.0.txt):\n    - [License Maven Plugin 2.0.0](https://github.com/mojohaus/license-maven-plugin)\n\n**[↑ Back to Index](#index)**\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnkaaf%2Fannotationprocessor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnkaaf%2Fannotationprocessor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnkaaf%2Fannotationprocessor/lists"}