ian martins <ia...@jhu.edu> writes:
> Thanks for explaining. That makes sense. > > I'm hesitant to add the compile-only header for a couple reasons. Generally > C-c C-c on a source block means "run this" but with compile-only it'll mean > "run this but don't run it." It's semantically inconsistent. Also I want to > bring more feature parity to ob-java, so that there's more consistency > across babel. I'm reluctant to add headers not found elsewhere. Thank you for the feedback, I am all with you on that and I think consistency is very important! > > Consider some alternatives: > 1. one option is to add a dummy main to every class. it could do nothing or > run unit tests. it's not a bad place to kick off unit tests, but I don't > think you should have to. > 2. you could use org-babel-tangle to write out the source files, and > compile from an emacs compile buffer. this might be more convenient than > compiling from babel since recompiles are a single keystroke. > 3. a future version of ob-java will know if a class has a "public static > void main." at that point it'll be easy to automatically skip execution of > the class if it doesn't define a main, without the need for a new > header. The alternatives are nice and I will manage fine! Looking forward to see what will happen to ob-java! :) > > On Mon, Sep 28, 2020 at 4:11 AM John Herrlin <jherr...@gmail.com> wrote: > >> >> Hey Ian, >> >> Thank you for the quick feedback! >> >> That workflow seems to work perfectly if it's Java all the way. Then it >> compiles all the related files. I am mostly working with the classes >> from Clojure. >> >> Here is an example: >> >> #+HEADER: :classname se/my_test_package/Hey >> #+HEADER: :compile-only t >> #+HEADER: :results none >> #+HEADER: :dir src >> #+BEGIN_SRC java >> package se.my_test_package; >> >> public class Hey { >> public static String hey(String name) { >> return "Hey " + name; >> } >> } >> #+END_SRC >> >> #+BEGIN_SRC clojure :results output code >> (import [se.my_test_package Hey]) >> >> (Hey/hey "John") >> #+END_SRC >> >> >> Best regards >> >> >> >> ian martins <ia...@jhu.edu> writes: >> >> > Hi John, >> > >> > Thanks for the suggestion and patch. Is the reason for this so that you >> can >> > have classes without needing dummy "main" methods? >> > >> > Did you consider using org-babel-tangle to generate the source files? >> This >> > works for me: >> > >> > Steps: >> > 1. put javatangle.org (below) on your local. >> > 2. create "pkg" directory where javatangle.org is >> > 3. run org-babel-tangle on javatangle.org (this writes two source files >> to >> > the pkg dir) >> > 4. run C-c C-c on the top source block (this compiles both source files >> and >> > runs main) >> > >> > ----- javatangle.org ----- >> > >> > #+begin_src java :results output :classname pkg/Main :tangle >> pkg/Main.java >> > package pkg; >> > >> > public class Main { >> > public static void main(String[] args) { >> > System.out.println(Hey.hey()); >> > } >> > } >> > #+end_src >> > >> > #+begin_src java :results output :classname pkg/Hey :tangle pkg/Hey.java >> > package pkg; >> > >> > public class Hey { >> > public static String hey() { >> > return "hey"; >> > } >> > } >> > #+end_src >> > >> > >> > >> > On Sun, Sep 27, 2020 at 5:19 PM John Herrlin <jherr...@gmail.com> wrote: >> > >> >> >> >> Hey Ian! >> >> >> >> Happy to see you as the maintainer of the ob-java! >> >> >> >> I would like to propose a feature to ob-java. The feature allows a >> >> source code block to write and compile only, without executing. >> >> >> >> Here is a common use case for me. >> >> >> >> Class without a entry point have an :compile-only header. >> >> >> >> #+HEADER: :classname se/my_test_package/Hey >> >> #+HEADER: :dir src >> >> #+HEADER: :compile-only t >> >> #+HEADER: :results none >> >> #+BEGIN_SRC java >> >> package se.my_test_package; >> >> >> >> public class Hey { >> >> public static String hey(String name) { >> >> return "Hey " + name; >> >> } >> >> } >> >> #+END_SRC >> >> >> >> The provided diff works for my small use case. What do you think? >> >> >> >> -- >> >> Best regards >> >> John >> >> >> >> >> >> >> -- >> Mvh John >> -- Mvh John