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 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 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 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 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 > >>> > >> >