Thanks for testing, and thanks for pointing that out. I will fix it so that `public` is optional.

btw, in your example you didn't have to specify `:classname` since you defined the class name in the source block.

btw2, did you notice that you can C-c C-c on source blocks that don't have main methods and it'll compile without error?

On Tue, Oct 20, 2020 at 3:17 PM John Herrlin <jherrlin@gmail.com> wrote:

Hey,

Did some debugging and found out that my class didn't contained =public=
and the patch requires it to be.

This works fine:

   #+HEADER: :classname Main
   #+HEADER: :dir src
   #+HEADER: :cmdline -classpath ./rxjava-1.3.8.jar:.
   #+HEADER: :cmpflag -classpath ./rxjava-1.3.8.jar
   #+BEGIN_SRC java :results output code
     import rx.Observable;
     public class Main {
         public static void main(String[] args) {
             Observable.range(5, 5)
                 .subscribe(System.out::println);
         }
     }
   #+END_SRC




ian martins <ianxm@jhu.edu> writes:

> I noticed that the tests didn't run with "make test." This updates the
> patch so that they can. I didn't add java to the list of default languages
> because the java tests are slow.
>
> On Mon, Oct 5, 2020 at 9:23 AM ian martins <ianxm@jhu.edu> wrote:
>
>> I wrote those examples in an org file so I could test as I wrote them, and
>> then exported it to make it more readable, but the export resulted in
>> source block headers being lost.  Here is the same without export:
>> ----
>> * Changes
>>
>> - support for functional mode (~:results value~)
>> - accept variables
>> - don't require package, class, and main definitions
>> - write source and result tempfiles to ~org-babel-temporary-directory~,
>> but respects the ~:dir~ header
>> - work with tramp
>>
>> * Examples
>> ** Example 1
>> This outputs "hello."  If class and main definitions aren't given the
>> code block will be wrapped in generic ones.
>>
>> #+begin_src java :results output silent
>>   System.out.print("hello");
>> #+end_src
>>
>> This is exactly equivalent:
>>
>> #+begin_src java :results output silent
>>   public class Main {
>>       public static void main(String[] args) {
>>           System.out.print("hello");
>>       }
>>   }
>> #+end_src
>>
>> ** Example 2
>> This also outputs "hello."
>>
>> #+begin_src java :results value silent
>>   return "hello";
>> #+end_src
>>
>> ** Example 3
>> This generates the class "Example" in the package "org.orgmode" in the
>> current directory.
>>
>> #+begin_src java :results output silent :classname org.orgmode.Example
>> :dir .
>>   System.out.print("hello, org-mode");
>> #+end_src
>>
>> ** Example 4
>> The "Hey" class defines a static method but no main. C-c C-c on the
>> "Hey" source block will write "./org/orgmode/Hey.java" and compile it.
>>
>> The "Main" class calls the "Hey" class. C-c C-c on the "Main" source
>> block will write "./org/orgmode/Main.java" and compile and run it.
>>
>> #+begin_src java :results output silent :dir .
>>   package org.orgmode;
>>
>>   public class Hey {
>>       public static String say() {
>>           return "hey";
>>       }
>>   }
>> #+end_src
>>
>> #+begin_src java :results output silent :dir .
>>   package org.orgmode;
>>
>>   public class Main {
>>       public static void main(String[] args) {
>>           System.out.print(Hey.say());
>>       }
>>   }
>> #+end_src
>>
>> Instead of C-c C-c, we could have added tangle headers and written the
>> source files out by tangling.
>>
>> ** Example 5
>> This prints the variable from the header
>>
>> #+begin_src java :var msg="hello, org-mode" :results output silent
>>   System.out.print(msg);
>> #+end_src
>>
>> ** Example 6
>> This prints "hello, org-mode." The table is provided to the method as a
>> list of lists.
>>
>> #+name: table
>> | message | hello, org-mode  |
>>
>> #+begin_src java :var tbl=table :results output silent
>>   System.out.print(tbl.get(0).get(1));
>> #+end_src
>>
>> ** Example 7
>> This example returns a list.
>>
>> Note that you're allowed to specify imports without defining the class
>> or main methods.
>>
>> #+begin_src java :results value :exports both
>>   import java.util.Arrays;
>>
>>   return Arrays.asList("message", "hello, org-mode");
>> #+end_src
>>
>> #+RESULTS:
>> | message | hello, org-mode |
>>
>> On Mon, Oct 5, 2020 at 8:35 AM ian martins <ianxm@jhu.edu> wrote:
>>
>>> 1 Changes
>>> =========
>>>
>>>   - support for functional mode (`:results value')
>>>   - accept variables
>>>   - don't require package, class, and main definitions
>>>   - write source and result tempfiles to
>>>     `org-babel-temporary-directory', but respects the `:dir' header
>>>   - work with tramp
>>>
>>>
>>> 2 Examples
>>> ==========
>>> Some examples follow.  See the tests for more examples.  I'll write
>>> proper docs after review.
>>>
>>> 2.1 Example 1
>>> ~~~~~~~~~~~~~
>>>
>>>   This outputs "hello."  If class and main definitions aren't given the
>>>   code block will be wrapped in generic ones.
>>>
>>>   ,----
>>>   | System.out.print("hello");
>>>   `----
>>>
>>>   This is exactly equivalent:
>>>
>>>   ,----
>>>   | public class Main {
>>>   |     public static void main(String[] args) {
>>>   |         System.out.print("hello");
>>>   |     }
>>>   | }
>>>   `----
>>>
>>>
>>> 2.2 Example 2
>>> ~~~~~~~~~~~~~
>>>
>>>   This also outputs "hello."
>>>
>>>   ,----
>>>   | return "hello";
>>>   `----
>>>
>>>
>>> 2.3 Example 3
>>> ~~~~~~~~~~~~~
>>>
>>>   This generates the class "Example" in the package "org.orgmode" in the
>>>   current directory.
>>>
>>>   ,----
>>>   | System.out.print("hello, org-mode");
>>>   `----
>>>
>>>
>>> 2.4 Example 4
>>> ~~~~~~~~~~~~~
>>>
>>>   The "Hey" class defines a static method but no main. C-c C-c on the
>>>   "Hey" source block will write "./org/orgmode/Hey.java" and compile it.
>>>
>>>   The "Main" class calls the "Hey" class. C-c C-c on the "Main" source
>>>   block will write "./org/orgmode/Main.java" and compile and run it.
>>>
>>>   ,----
>>>   | package org.orgmode;
>>>   |
>>>   | public class Hey {
>>>   |     public static String say() {
>>>   |         return "hey";
>>>   |     }
>>>   | }
>>>   `----
>>>
>>>   ,----
>>>   | package org.orgmode;
>>>   |
>>>   | public class Main {
>>>   |     public static void main(String[] args) {
>>>   |         System.out.print(Hey.say());
>>>   |     }
>>>   | }
>>>   `----
>>>
>>>   Instead of C-c C-c, we could have added tangle headers and written the
>>>   source files out by tangling.
>>>
>>>
>>> 2.5 Example 5
>>> ~~~~~~~~~~~~~
>>>
>>>   This prints the variable from the header
>>>
>>>   ,----
>>>   | System.out.print(msg);
>>>   `----
>>>
>>>
>>> 2.6 Example 6
>>> ~~~~~~~~~~~~~
>>>
>>>   This prints "hello, org-mode." The table is provided to the method as
>>>   a list of lists.
>>>
>>>    message  hello, org-mode
>>>
>>>   ,----
>>>   | System.out.print(tbl.get(0).get(1));
>>>   `----
>>>
>>>
>>> 2.7 Example 7
>>> ~~~~~~~~~~~~~
>>>
>>>   This example returns a list.
>>>
>>>   Note that you're allowed to specify imports without defining the class
>>>   or main methods.
>>>
>>>   ,----
>>>   | import java.util.Arrays;
>>>   |
>>>   | return Arrays.asList("message", "hello, org-mode");
>>>   `----
>>>
>>>    message  hello, org-mode
>>>
>>