emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: John Herrlin <jherrlin@gmail.com>
To: ian martins <ianxm@jhu.edu>
Cc: Org-Mode mailing list <emacs-orgmode@gnu.org>
Subject: Re: ob-java compile only
Date: Tue, 29 Sep 2020 21:22:16 +0200	[thread overview]
Message-ID: <87y2ksie1k.fsf@gmail.com> (raw)
In-Reply-To: <CAC=rjb5c=aLNEBk9KyZBTJ6e3GUigF3veQ3fiTHN2tF8cLc6Kw@mail.gmail.com>


ian martins <ianxm@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 <jherrlin@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 <ianxm@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 <jherrlin@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


      reply	other threads:[~2020-09-29 19:46 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-27 21:19 ob-java compile only John Herrlin
2020-09-28  1:53 ` ian martins
2020-09-28  8:11   ` John Herrlin
2020-09-29  2:18     ` ian martins
2020-09-29 19:22       ` John Herrlin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y2ksie1k.fsf@gmail.com \
    --to=jherrlin@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=ianxm@jhu.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).