Forum Stats

  • 3,853,824 Users
  • 2,264,280 Discussions
  • 7,905,459 Comments

Discussions

Can you write simple Java code in a UNIX function and run it? See example....

966239
966239 Member Posts: 27
edited Apr 1, 2015 3:41PM in New To Java

Hi,

I'm new to Java and I have a question.

Is there any possible way a simple script like the below would work in a UNIX function called from a shell script. I know you're not supposed to do this but can you?

Thanks in advance,

...

javatst() {
   $JAVA_HOME/bin/java  <<- _java
  public class HelloWorld { 
  public static void main(String[] args) { 
  System.out.println("Hello, World");
  }
  }
  _java
}

javatst

...

Answers

  • PhHein
    PhHein Member, Moderator Posts: 7,245 Silver Trophy
    edited Feb 18, 2015 6:46AM

    MOD: moved from JDBC

  • 966239
    966239 Member Posts: 27
    edited Feb 19, 2015 1:10PM

    Could you elaborate please?

  • TPD-Opitz
    TPD-Opitz Member Posts: 2,465 Silver Trophy
    edited Feb 19, 2015 3:50PM

    No.

    Java is no scripting language.

    You need to translate the java source code to the intermediate language which is in turn interpreted by the Java Virtual Machine (JVM) at execution time.

    The java compiler which does the translation from source code to IL code works with files in your file system. You cannot pass in a stream to be compiled. (at leest the existing implementations I know of).

    So your shell script must write the code into a *.java file (with the exact same name as the class), pass that file to the javac executable and after that it could run the JVM (the java executable) with the resulting *.class file as parameter.

    Step 1 and 2 are better done within a Java IDE.

    bye

    TPD

  • 966239
    966239 Member Posts: 27
    edited Feb 20, 2015 12:49PM

    When I took java 15 years ago, I could have sworn I saw our instructor execute a java command from the command line where he did the compile and the run at the same time with the main(String[] argv) method and a println enclosed in brackets. I think it was a hypothetical example to show that you could do it at the command liline because he was trying to use a visual example to show us parts of the main(String[] argv) statement.

    Would you or anyone know about doing that?

  • TPD-Opitz
    TPD-Opitz Member Posts: 2,465 Silver Trophy
    edited Feb 21, 2015 7:21AM

    I didn't attent that class but it's quite easy to create a shell script that does the three steps in sequence.

    But again, Java is no scripting language.

    If you want a scripting language with Java syntax you should have a look at Groovie but on the other hand the java syntax is quite hard to handle in scripting environments. It's a bit too chatty...

    bye

    TPD

  • 2894431
    2894431 Member Posts: 1
    edited Mar 1, 2015 5:09AM

    You can run a java class from a shell script like below:

    #!/bin/sh

    <span class="kwd" style="color: #00008b;">exec</span><span class="pln" style="color: #000000;"> </span><span class="pun" style="color: #000000;">/</span><span class="pln" style="color: #000000;">usr</span><span class="pun" style="color: #000000;">/</span><span class="pln" style="color: #000000;">bin</span><span class="pun" style="color: #000000;">/</span><span class="pln" style="color: #000000;">java </span>-DsysParam1="var1_val" -DsysParam2="var2_val" -cp jar1:jar2:jar3 /home/unixUserName/javaClasses/Test.java

    exit 0

  • TPD-Opitz
    TPD-Opitz Member Posts: 2,465 Silver Trophy
    edited Mar 1, 2015 5:56AM
    2894431 wrote:
    
    You can run a java class from a shell script like below:
    
    #!/bin/sh
    
    <span class="kwd" style="color: #00008b;">exec</span><span class="pln" style="color: #000000;"> </span><span class="pun" style="color: #000000;">/</span><span class="pln" style="color: #000000;">usr</span><span class="pun" style="color: #000000;">/</span><span class="pln" style="color: #000000;">bin</span><span class="pun" style="color: #000000;">/</span><span class="pln" style="color: #000000;">java </span>-DsysParam1="var1_val" -DsysParam2="var2_val" -cp jar1:jar2:jar3 /home/unixUserName/javaClasses/Test.java
    
    exit 0
    

    No!

    This is neither a valid answer to the OPs question (since your script does not create the content of Test.java) nor working.

    The java executable can only run *.class files which contain byte code of the intermediate language generated by the javac executable.

    Your suggestion leads to a ClassNotFound exception.

    bye

    TPD

  • jschellSomeoneStoleMyAlias
    jschellSomeoneStoleMyAlias Member Posts: 24,877 Gold Badge
    edited Apr 1, 2015 3:41PM

    > When I took java 15 years ago, I could have sworn I saw our instructor execute a java command from the command line

    Could be that the teacher wrote their own shell environment.

    Or that you mistook an IDE for a shell.

    Or, I believe at one time, there was an environment that did java scripting (there was one for C or C++ too) and perhaps that was it.

This discussion has been closed.