javah
Greg Brown
greg.x.brown at oracle.com
Mon Mar 12 18:13:27 PDT 2012
Hi Jon,
Thanks for looking into this. Could you possibly try running your test with Inner as a nested (static) class rather than an inner class? I wonder if that might have something to do with the difference in behavior.
Greg
On Mar 12, 2012, at 7:30 PM, Jonathan Gibbons wrote:
> On 03/12/2012 12:30 PM, Greg Brown wrote:
>>>> Has the behavior of javah changed in Java 7? I'm using the<javah> task in Ant to generate some JNI headers. When I run my Ant script under Java 6, I only get headers for classes I explicitly specify. Under Java 7, I get headers for all of my specified classes as well as any nested classes defined by those classes, even though the nested classes themselves don't specify any native methods.
>>>>
>>>> I'm not sure if Ant or javah is responsible for the change, but if it is javah - is this intentional, or is it a bug?
>>>>
>>>> Thanks,
>>>> Greg
>>>>
>>> javah was rewritten in JDK 7, but the intent was the headers generated should be the same as for earlier versions of javah.
>> So, to confirm - the fact that these headers were are generated in Java 6 but are generated in Java 7 is likely a bug?
>>
>>
>>
>
> Greg,
>
> I see the same behavior on JDK 5, 6, 7, 8.
>
> Here's my test program:
>> package p;
>>
>> class C {
>> native void m();
>>
>> class Inner {
>> void m2() { }
>> }
>> }
>
> Here's my test script:
>> #!/bin/sh
>>
>> rm -rf play/classes play/jdk*
>>
>> mkdir play/classes
>> /opt/jdk/1.5.0/bin/javac -d play/classes $(find play/src -name \*.java)
>>
>> for i in 5 6 7 8 ; do
>> mkdir play/jdk$i
>> /opt/jdk/1.$i.0/bin/javah -classpath play/classes -d play/jdk$i p.C
>> done
>>
>> find play/jdk*
>
> And here's the output:
>> $ sh -x play/test.sh
>> + rm -rf play/classes play/jdk5 play/jdk6 play/jdk7 play/jdk8
>> + mkdir play/classes
>> + find play/src -name *.java
>> + /opt/jdk/1.5.0/bin/javac -d play/classes play/src/p/C.java
>> + mkdir play/jdk5
>> + /opt/jdk/1.5.0/bin/javah -classpath play/classes -d play/jdk5 p.C
>> + mkdir play/jdk6
>> + /opt/jdk/1.6.0/bin/javah -classpath play/classes -d play/jdk6 p.C
>> + mkdir play/jdk7
>> + /opt/jdk/1.7.0/bin/javah -classpath play/classes -d play/jdk7 p.C
>> + mkdir play/jdk8
>> + /opt/jdk/1.8.0/bin/javah -classpath play/classes -d play/jdk8 p.C
>> + find play/jdk5 play/jdk6 play/jdk7 play/jdk8
>> play/jdk5
>> play/jdk5/p_C_Inner.h
>> play/jdk5/p_C.h
>> play/jdk6
>> play/jdk6/p_C_Inner.h
>> play/jdk6/p_C.h
>> play/jdk7
>> play/jdk7/p_C_Inner.h
>> play/jdk7/p_C.h
>> play/jdk8
>> play/jdk8/p_C_Inner.h
>> play/jdk8/p_C.h
>
> -- Jon
>
More information about the macosx-port-dev
mailing list