Javac compiler not recognizing wildcard? - java

I set up a folder containing a test java file that only contains the word "test". I want docker to compile it. To run it, I call
$ docker run -it -v ~/my/path/testpayload:/payload -w /payload test_docker javac -cp /usr/share/java/*:. *.java
However, I get the following error
javac: file not found: *.java
Usage: javac <options> <source files>
use -help for a list of possible options
If I explicitly state the name of the java file like so:
$ docker run -it -v ~/my/path/testpayload:/payload -w /payload test_docker javac -cp /usr/share/java/*:. TestPayload.java
It tries to compile and returns with the expected error:
TestPayload.java:1: error: reached end of file while parsing
test
^
1 error
I tried it again with the wildcard but without the classpath and it still doesn't work, which makes me think it's something with the wildcard, I googled but it seems to me like I'm using the wildcard correctly.
Thanks.

Related

Compile the java code by using the following command as mentioned below

I was doing WordCount using Ubuntu Shell, when I was Compile the java code by using the following command as mentioned below
javac -classpath ${HADOOP_CLASSPATH} -d
‘/home/abdullah/Desktop/WordCountTutorial/tutorial_classes’
‘/home/abdullah/Desktop/WordCountTutorial/WordCount.java’
I got the error below
javac invalid flag:‘/home/abdullah/Desktop/WordCountTutorial/tutorial_classes’
‘/home/abdullah/Desktop/WordCountTutorial/WordCount.java’
Usage: javac <options> <source files>
use -help for a list of possible options
I can observe following issues:
Quotes: Don't give quotes. -d expects a directory path.
direct directory path : should be changed with a java file path or use **/*.java e.g. /home/abdullah/Desktop/WordCountTutorial/tutorial_classes/*.java

I'm having trouble setting the classpath for javac

I'm trying to run java and javac from the command line, but I'm having trouble setting the CLASSPATH for the javac sdk tool.
I've successfully added the CLASSPATH variable through the windows environmental variable settings, and this works for the java command. I am able to execute class files from any directory in the command line. However, when trying to use the javac command (where the .java files are in the same CLASSPATH directory), i receive the error message that the file is not found.
My CLASSPATH variable is set to:
C:\Users\ejovo\OneDrive\Documents\Coding\Java>
Here are 3 examples of what I mean.
C:\>javac MyFirstApp.java
javac: file not found: MyFirstApp.java
Usage: javac <options> <source files>
use -help for a list of possible options
C:\Users\ejovo\OneDrive\Documents\Coding\Java>javac MyFirstApp.java
C:\>java MyFirstApp
Hello World
We see that the java command can be run from anywhere while the javac still has to be run from the directory in which the .java files are.
I've tried setting the javac CLASSPATH with the -cp and -classpath options without any luck:
C:\>javac -cp C:\Users\ejovo\OneDrive\Documents\Coding\Java
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options
C:\>javac -classpath C:\Users\ejovo\OneDrive\Documents\Coding\Java
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options
And I've already set a PATH variable that makes the java and javac commands run correctly
I've also tried changing the sourcepath with the -sourcepath argument:
C:\>javac -sourcepath C:\Users\ejovo\OneDrive\Documents\Coding\Java
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options
Despite that, I clearly do have a .java source file present:
Directory of C:\Users\ejovo\OneDrive\Documents\Coding\Java
07/25/2019 03:08 PM <DIR> .
07/25/2019 03:08 PM <DIR> ..
07/25/2019 03:29 PM 425 MyFirstApp.class
07/24/2019 06:40 PM 127 MyFirstApp.java
2 File(s) 552 bytes
2 Dir(s) 57,735,630,848 bytes free
Let me know if anyone has any other ideas!
It appears that you are getting a bit confused here. The CLASSPATH is used to tell the java and javac programs where to find compiled .class and .jar files.
You are attempting to use the CLASSPATH to have javac locate SOURCE files, which does not work.
See here:
https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
You might wish to examine the -sourcepath argument.

How to compile a java project with repo maven (slf4j) in command line?

I've a problem, I must compile a java project (example: https://github.com/iluwatar/java-design-patterns/tree/master/bridge) but it's a maven project and i must import slf4j.
I've tried with sudo apt-get install libslf4j-java or by downloading manually the package (here: https://www.slf4j.org/download.html) but it never work when I use javac.
I get this error: error: package org.slf4j does not exist
Do you have any ideas? I'm stuck on this error and I haven't found any similar issues...
EDIT : The goal is to compile without maven, that's the hard thing for me.
EDIT2 : I've done this :
javac -cp /usr/share/maven/lib/slf4j-simple.jar:java-design-patterns/bridge/src/main/java/com/iluwatar/bridge/App.java
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options
javac -cp -sourcepath /usr/share/maven/lib/slf4j-simple.jar:java-design-patterns/bridge/src/main/java/com/iluwatar/bridge/App.java
javac: file not found: /usr/share/maven/lib/slf4j-simple.jar:java-design-patterns/bridge/src/main/java/com/iluwatar/bridge/App.java
Usage: javac <options> <source files>
use -help for a list of possible options
I don't know what to do, it's so simple with maven, when i see this i'm just lost.
I've create 2 files : jars (where i will create and put jars) and temp (where i will create and put class)
EDIT 3 : I downloaded the package and put it at the .
Then i use : javac -classpath slf4j-1.7.25/slf4j-api-1.7.25-sources.jar -d temp java-design-patterns/bridge/src/main/java/com/iluwatar/bridge/*.java
and it worked fine.
Compiling from command line must be done invoking javac and properly passing arguments:
javac -cp lib1.jar:lib2.jar:lib3.jar... <source files>
In your case:
javac -cp /usr/share/maven/lib/slf4j-simple.jar java-design-patterns/bridge/src/main/java/com/iluwatar/bridge/*.java
P.S.: Compiling trhough command line is really annoying. I recommend you to use Maven, since it is already a Maven project.

javac: invalid flag: .getting error when compiling a java servlet

i run command
javac -classpath /home/coolhunk/JBoss/jboss-6.0.0.Final/common/lib/jboss-servlet-api_3.0_spec.jar -d helloapp.war/WEB-INF/classes -sourcepath src/com/manning/jbia/intro/*
for generating java class files.but i am getting error
javac: invalid flag: src/com/manning/jbia/intro/HelloWorldServlet.java~
Usage: javac <options> <source files>
use -help for a list of possible options
can anyone please point out what is the mistake in this command ??
Try these commands using tomcat, place your servlet source in src folder and run these,
C:\Documents and Settings\ssit>cd C:\src
C:\src>javac -classpath "C:\Program Files\Apache Software Foundation\Tomcat 6.0\
lib\servlet-api.jar" MyServlet.java
you can get the class file for the servlet. After getting the class file make the war file.
javac -classpath /home/coolhunk/JBoss/jboss-6.0.0.Final/common/lib/jboss-servlet-api_3.0_spec.jar -d helloapp.war/WEB-INF/classes -sourcepath src/com/manning/jbia/intro/*
The problem is the last item. The wildcard causes it to be expanded into everything in the directory, which causes everything after the first expansion to be treated as a source file name. The expansions also appear to include src/com/manning/jbia/intro/HelloWorldServlet.java~, which the compiler doesn't want to know about.
Try this:
javac -classpath /home/coolhunk/JBoss/jboss-6.0.0.Final/common/lib/jboss-servlet-api_3.0_spec.jar -d helloapp.war/WEB-INF/classes -sourcepath src src/com/manning/jbia/intro/*.java

Java compiler linux

I was on windows and my compiler code was
#echo off
"C:\Program Files\Java\jdk1.6.0_29\bin\javac.exe" -classpath deps/log4j-1.2.15.jar;deps/jython.jar;deps/xstream.jar;deps/mina.jar;deps/mysql.jar;deps/poi.jar;deps/slf4j.jar;deps/slf4j-nop.jar -d bin src\server\event\*.java src\server\model\items\*.java src\server\model\minigames\*.java src\server\model\npcs\*.java src\server\model\objects\*.java src\server\model\players\*.java src\server\model\players\skills\*.java src\server\model\players\packets\*.java src\server\model\shops\*.java src\server\net\*.java src\server\task\*.java src\server\util\*.java src\server\world\*.java src\server\util\log\*.java src\server\*.java src\server\world\map\*.java
pause
Now when I moved to linux, it doesn't work.
I've tried to change it to .sh file and edited like this
javac -classpath deps/log4j-1.2.15.jar:deps/jython.jar:deps/xstream.jar:deps/mina.jar:deps/mysql.jar:deps/poi.jar:deps/slf4j.jar:deps/slf4j-nop.jar -d bin src/server/event/*.java src/server/model/items/*.java src/server/model/minigames/*.java src/server/model/npcs/*.java src/server/model/objects/*.java src/server/model/players/*.java src/server/model/players/skills/*.java src/server/model/players/packets/*.java src/server/model/shops/*.java src/server/net/*.java src/server/task/*.java src/server/util/*.java src/server/world/*.java src/server/util/log/*.java src/server/*.java src/server/world/map/*.java
Basically I changed ; to :, \ to /
After running sh compile.sh in shell, I get error.
javac: invalid flag: src/server/world/map/*.java
Usage: javac <options> <source files>
use -help for a list of possible options
: not found 2: compile.sh:
Anyone know what I am doing wrong?
Doing a little research it seems this problem might be caused by incorrect line endings in your .sh file. Have you tried completely retyping it in vi, emacs, vim, or something like that?

Categories