29

I would like to do some annotation processing based on the example in the following link: http://www.zdnetasia.com/writing-and-processing-custom-annotations-part-3-39362483.htm.

However, I would like to implement this in my Android project, and it seems I cannot use the package with the android platform. Do I need to add an external jar or is there something I'm missing?

Thanks.

srowley
  • 837
  • 1
  • 12
  • 24

9 Answers9

23

The javax.annotation.processing package is not included in Android. You don't need to include this inside your compiled app module. You just need this dependency for your compiler/processor module during build time. Therefore, inside your app's build.gradle you should add the following after including your annotation processor:

provided 'org.glassfish:javax.annotation:10.0-b28'
Brian Attwell
  • 9,239
  • 2
  • 31
  • 26
18

There is a much easier way if you use Android Studio / Gradle.

I found the following looking through the answers of the question How do I add javax.annotation.Generated to Java SE 5?:

For a Gradle build the dependency should be

compile 'org.glassfish:javax.annotation:10.0-b28'

Community
  • 1
  • 1
Dirk
  • 2,011
  • 1
  • 20
  • 25
11

The javax.annotation.processing package is not included in Android, but the Android VM team describes how to include extra javax packages here - it might be applicable to your question.

approxiblue
  • 6,982
  • 16
  • 51
  • 59
Jens
  • 16,853
  • 4
  • 55
  • 52
  • 12
    Cannot see the linked solution. That's why we should quote/copy/refer instead of plain linking – denispyr Nov 01 '15 at 10:58
  • Updated the link for reference. For the record, the linked guide uses an old version of Android (with Ant build scripts); you'd want the gradle solutions in the other answers. – approxiblue Nov 18 '16 at 15:38
9
implementation 'org.glassfish:javax.annotation:10.0-b28'
compileOnly 'com.github.pengrad:jdk9-deps:1.0'

Add these two dependencies in your build.gradle file, this will work.

Aniruddh Parihar
  • 3,072
  • 3
  • 21
  • 39
Vineet Rathee
  • 91
  • 1
  • 1
3

compileOnly 'org.glassfish:javax.annotation:10.0-b28'

user2212515
  • 1,220
  • 1
  • 12
  • 10
2

Simply adding compile 'javax.annotation:javax.annotation-api:1.2' should do the trick.

see here for all available versions: https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api

TmTron
  • 17,012
  • 10
  • 94
  • 142
ToBe
  • 87
  • 1
  • 8
2

for kotlin DSL you need to use compileOnly("org.glassfish:javax.annotation:10.0-b28")

for groovy DSL you need to use compileOnly 'org.glassfish:javax.annotation:10.0-b28'

Foroogh Varmazyar
  • 1,057
  • 1
  • 14
  • 18
0

I also faced same issue. So generally we will face this issue when our jdk version will be 8+ . So for jdk8+ you just need to add below dependency in your build.gradle(:app) file.

compileOnly 'com.github.pengrad:jdk9-deps:1.0'

It will work like a charm. Please give it a try!

-4

I find a method in butterknife. Add this in build.gradle:

compile files(org.gradle.internal.jvm.Jvm.current().getJre().homeDir.getAbsolutePath()+'/lib/rt.jar')
Peter Tretyakov
  • 3,380
  • 6
  • 38
  • 54
turbofan
  • 318
  • 3
  • 7