Hey Ian,
The changes list looks really nice! But I can't get the patch to work. The use case I have is this and it works fine in master. #+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; class Main { public static void main(String[] args) { Observable.range(5, 5) .subscribe(System.out::println); } } #+END_SRC The error message I get is the following: #+BEGIN_SRC text /home/john/git/org-files/programming/src/Main.java:5: error: class Main is already defined in package unnamed package class Main { ^ /home/john/git/org-files/programming/src/Main.java:6: error: Illegal static declaration in inner class Main.Main public static void main(String[] args) { ^ modifier 'static' is only allowed in constant variable declarations 2 errors #+END_SRC Best regards John ian martins <ia...@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 <ia...@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 <ia...@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 >>> >>