javac -classpath "/installs/hadoop-0.20.2/*.jar;/installs/hadoop-0.20.2/lib/*.jar" appClientModule/grid/comp/tools/CleanTmp.java
appClientModule/grid/comp/tools/CleanTmp.java:2: package org.apache.hadoop.fs does not exist
import org.apache.hadoop.fs.*;
^
appClientModule/grid/comp/tools/CleanTmp.java:3: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.JobConf;
^
appClientModule/grid/comp/tools/CleanTmp.java:4: package org.apache.commons.logging does not exist
import org.apache.commons.logging.*;
^
appClientModule/grid/comp/tools/CleanTmp.java:5: package org.apache.commons.logging.impl does not exist
import org.apache.commons.logging.impl.Log4JLogger;
^
appClientModule/grid/comp/tools/CleanTmp.java:8: cannot find symbol
symbol : class Log4JLogger
location: class grid.comp.tools.CleanTmp
Log4JLogger lg=new Log4JLogger(this.getClass().getName());
^
appClientModule/grid/comp/tools/CleanTmp.java:9: cannot find symbol
symbol : class JobConf
location: class grid.comp.tools.CleanTmp
JobConf jconf;
^
appClientModule/grid/comp/tools/CleanTmp.java:8: cannot find symbol
symbol : class Log4JLogger
location: class grid.comp.tools.CleanTmp
Log4JLogger lg=new Log4JLogger(this.getClass().getName());
^
7 errors
tools $ javac -classpath "/installs/hadoop-0.20.2/*.jar;/installs/hadoop-0.20.2/lib/*.jar" appClientModule/grid/comp/tools/CleanTmp.java
jabir:CompareHdfs jabir.ahmed$ javac -classpath "/installs/hadoop-0.20.2/*.jar;/installs/hadoop-0.20.2/lib/*.jar" appClientModule/grid/comp/tools/CleanTmp.java
appClientModule/grid/comp/tools/CleanTmp.java:2: package org.apache.hadoop.fs does not exist
import org.apache.hadoop.fs.*;
^
appClientModule/grid/comp/tools/CleanTmp.java:3: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.JobConf;
^
appClientModule/grid/comp/tools/CleanTmp.java:4: package org.apache.commons.logging does not exist
import org.apache.commons.logging.*;
^
appClientModule/grid/comp/tools/CleanTmp.java:5: package org.apache.commons.logging.impl does not exist
import org.apache.commons.logging.impl.Log4JLogger;
^
appClientModule/grid/comp/tools/CleanTmp.java:8: cannot find symbol
symbol : class Log4JLogger
location: class grid.comp.tools.CleanTmp
Log4JLogger lg=new Log4JLogger(this.getClass().getName());
^
appClientModule/grid/comp/tools/CleanTmp.java:9: cannot find symbol
symbol : class JobConf
location: class grid.comp.tools.CleanTmp
JobConf jconf;
^
appClientModule/grid/comp/tools/CleanTmp.java:8: cannot find symbol
symbol : class Log4JLogger
location: class grid.comp.tools.CleanTmp
Log4JLogger lg=new Log4JLogger(this.getClass().getName());
^
7 errors
tools $ ls /installs/hadoop-0.20.2/lib/*.jar
/installs/hadoop-0.20.2/lib/ant-contrib-1.0b3.jar /installs/hadoop-0.20.2/lib/jasper-runtime-5.5.12.jar
/installs/hadoop-0.20.2/lib/aspectjrt-1.6.5.jar /installs/hadoop-0.20.2/lib/jets3t-0.6.1.jar
/installs/hadoop-0.20.2/lib/aspectjtools-1.6.5.jar /installs/hadoop-0.20.2/lib/jetty-6.1.26.cloudera.1.jar
/installs/hadoop-0.20.2/lib/commons-cli-1.2.jar /installs/hadoop-0.20.2/lib/jetty-servlet-tester-6.1.26.cloudera.1.jar
/installs/hadoop-0.20.2/lib/commons-codec-1.4.jar /installs/hadoop-0.20.2/lib/jetty-util-6.1.26.cloudera.1.jar
/installs/hadoop-0.20.2/lib/commons-daemon-1.0.1.jar /installs/hadoop-0.20.2/lib/jsch-0.1.42.jar
/installs/hadoop-0.20.2/lib/commons-el-1.0.jar /installs/hadoop-0.20.2/lib/junit-4.5.jar
/installs/hadoop-0.20.2/lib/commons-httpclient-3.1.jar /installs/hadoop-0.20.2/lib/kfs-0.2.2.jar
/installs/hadoop-0.20.2/lib/commons-logging-1.0.4.jar /installs/hadoop-0.20.2/lib/log4j-1.2.15.jar
/installs/hadoop-0.20.2/lib/commons-logging-api-1.0.4.jar /installs/hadoop-0.20.2/lib/mockito-all-1.8.2.jar
/installs/hadoop-0.20.2/lib/commons-net-1.4.1.jar /installs/hadoop-0.20.2/lib/oro-2.0.8.jar
/installs/hadoop-0.20.2/lib/core-3.1.1.jar /installs/hadoop-0.20.2/lib/servlet-api-2.5-20081211.jar
/installs/hadoop-0.20.2/lib/hadoop-fairscheduler-0.20.2-cdh3u2.jar /installs/hadoop-0.20.2/lib/servlet-api-2.5-6.1.14.jar
/installs/hadoop-0.20.2/lib/hsqldb-1.8.0.10.jar /installs/hadoop-0.20.2/lib/slf4j-api-1.4.3.jar
/installs/hadoop-0.20.2/lib/jackson-core-asl-1.5.2.jar /installs/hadoop-0.20.2/lib/slf4j-log4j12-1.4.3.jar
/installs/hadoop-0.20.2/lib/jackson-mapper-asl-1.5.2.jar /installs/hadoop-0.20.2/lib/xmlenc-0.52.jar
/installs/hadoop-0.20.2/lib/jasper-compiler-5.5.12.jar## Heading ##
So how do i set the class path
I tried setting via the env variable too
$ echo $CLASSPATH
/installs/hadoop/lib/.jar:/installs/hadoop/.jar:/installs/hadoop-0.20.2/.jar:/installs/hadoop-0.20.2/lib/.jar
it still fails
$ javac -version
javac 1.6.0_29
Go for a more clear classpath like:
javac -classpath $HADOOP_HOME/hadoop-core-0.20.204.0.jar:$HADOOP_HOME/lib/commons-cli-1.2.jar -d inception src/Inception.java
(in this case Inception is your java program. don't know why i mentioned that but it's better to be more explicit then not!)
Most of the time you are going to need the hadoop-core-(yourversion) and the commons-cli if you are using the Tool interface.
If you have set the CLASSPATH variable, then you don't need to specify the -classpath flag in the javac command as that will take the classpath value from the environment variable CLASSPATH
The value of classpath needs to point to the actual jar file rather than .jar
For example,
set CLASSPATH=/myapp/mylib.jar
Depending on the platform you are on, you can either use : or ; as the delimiter between different paths. For Windows, use ; and UNIX normally uses :
In UNIX:
set CLASSPATH=/myapp/myclasses1.jar:/myapp/myclasses2.jar
But in Windows you would need to use semicolon as the delimiter between the paths
set CLASSPATH=/myapp/myclasses1.jar;/myapp/myclasses2.jar
inquire's solution helped me. Here is the syntax I used on HDInsight version 2.1:
C:\apps\dist\java\bin\javac -classpath %HADOOP_HOME%\hadoop-core-1.2.0.1.3.0.1-0302.jar;%HADOOP_HOME%\lib\commons-cli-1.2.jar WordCount.java
Instead of specifying individual libraries, just add " -classpath yarn classpath ". That makes the command pretty easy and simple.
Related
I am creating in my code a Java file, which I need to convert to a class. My file contains the following:
import com.company.tpch.TpchApplication;
import com.company.tpch.TpchApplicationBuilder;
import com.speedment.runtime.core.ApplicationBuilder;
public class java {
public void x() {
TpchApplication app = new TpchApplicationBuilder()
.withPassword("root")
.withLogging(ApplicationBuilder.LogType.STREAM)
.withLogging(ApplicationBuilder.LogType.APPLICATION_BUILDER)
.withSkipCheckDatabaseConnectivity()
.build();
}
}
When I try to compile the file with
javac -d . C:\Users\s\Desktop\demo\src\main\java\java.java
I have these errors:
import com.company.tpch.TpchApplication;
^
C:\Users\s\Desktop\demo\src\main\java\java.java:2: error: package com.company.tpch does not exist
import com.company.tpch.TpchApplicationBuilder;
^
C:\Users\s\Desktop\demo\src\main\java\java.java:3: error: package com.speedment.runtime.core does not exist
import com.speedment.runtime.core.ApplicationBuilder;
^
C:\Users\s\Desktop\demo\src\main\java\java.java:7: error: cannot find symbol
TpchApplication app = new TpchApplicationBuilder()
^
symbol: class TpchApplication
location: class java
C:\Users\s\Desktop\demo\src\main\java\java.java:11: error: package ApplicationBuilder does not exist
.withLogging(ApplicationBuilder.LogType.APPLICATION_BUILDER)
^
C:\Users\s\Desktop\demo\src\main\java\java.java:10: error: package ApplicationBuilder does not exist
.withLogging(ApplicationBuilder.LogType.STREAM)
^
symbol: class TpchApplicationBuilder
location: class java
How can I solve this?
You need to add all classes that are used to your command. Like this:
javac com/company/tpch/TpchApplication com/company/tpch/TpchApplicationBuilder java.java
Of course you have to change this according to your directory structure, since I don't know it.
Anyway I would recommend an IDE that compiles your whole project at once like IntelliJ/Eclipse and/or a dependency tool like Maven/Gradle.
I have downloaded my old project that was built on a different computer. I have Java environment installed on the current one. I have also downloaded junit to get things work. When I run my tests using build.rb and run_test.rb - files that worked previously, I receive lots of errors negating the entire code. Here's the example
$ ruby build.rb
shop_basket\Cashdesk.java:4: error: class CashDesk is public, should be
declared in a file named CashDesk.java
public class CashDesk{
^
1 error
shop_basketSpec\CashdeskTest.java:5: error: class CashDeskTest is public,
should be declared in a file named CashDeskTest.java
public class CashDeskTest{
^
shop_basketSpec\BasketTest.java:2: error: package org.junit does not exist
import org.junit.*;
^
shop_basketSpec\BasketTest.java:3: error: package org.junit does not exist
import static org.junit.Assert.*;
^
shop_basketSpec\CashdeskTest.java:2: error: package org.junit does not exist
import org.junit.*;
^
shop_basketSpec\CashdeskTest.java:3: error: package org.junit does not exist
import static org.junit.Assert.*;
^
shop_basketSpec\CashdeskTest.java:7: error: cannot find symbol
CashDesk cashdesk;
^
symbol: class CashDesk
location: class CashDeskTest
shop_basketSpec\CustomerTest.java:2: error: package org.junit does not exist
import org.junit.*;
^
shop_basketSpec\CustomerTest.java:3: error: package org.junit does not
exist
import static org.junit.Assert.*; ^
shop_basketSpec\ProductTest.java:2: error: package org.junit does not exist
import org.junit.*;
^
and there are more errors like this as if they concerned the entire code structure. I don't get why.
All the CLASSPATH etc seems to be set on my windows OS. The entire thing irritates as I cannot move with my coding. Thanks for help
Here's my set CLASSPATH
CLASSPATH image
The content of my ruby files
run_tests.rb
require 'find'
def find_valid_files
files = []
Find.find('bin') do |path|
files << path if path.include?(".class") && path.include?("Test")
end
return files
end
def run_tests(files)
for file in files
fileName = File.basename(file, ".*")
puts "Running #{fileName}"
system("java org.junit.runner.JUnitCore #{fileName}")
end
end
valid_files = find_valid_files()
Dir.chdir "bin"
run_tests(valid_files)
build.rb
require 'fileutils'
def filter_directories
excluded_directories = ["bin"]
all_files = Dir.glob('*')
return all_files.select do |file|
next if excluded_directories.include?(file)
File.directory?(file)
end
end
def create_bin
FileUtils.rm_rf('bin')
FileUtils.mkdir_p('bin')
end
def run_tests directories
for directory in directories
puts "building #{directory}"
system("javac -d bin #{directory}/*.java")
end
end
create_bin()
valid_directories = filter_directories()
run_tests(valid_directories)
For the first two errors relating to CashDesk and CashDeskTest - your file names have a lowercase 'd' (Cashdesk.java and CashdeskTest.java). The casing in the file name should match the actual class names as declared in the code. Fix that.
If you still see JUnit errors afterwards, check that you have a JUnit JAR on your classpath.
Errors Cashdesk.java:4: error: class CashDesk is public, should be
declared in a file named CashDesk.java are caused by inconsistency between .java file names and public class which it contains. In this exaple class CashDesk is saved in Cashdesk.java file - note d vs D in Desk.
The second bunch of errors error: package org.junit does not exist mean you should include JUnit library to the classpath of your project
I created multiple packages and want to compile and run them. I fiddled around with javac and java and learned about how packages should be named and how a project should be structured. I hope I got all right. But I fail at compilation and running the stuff. I know I could use an IDE for this, but I want to try it with the command-line tools just for curiousity.
Here is how my project is organized:
Project
+ src
+ net
+ chris
+ dojo
- Program.java
+ datastructures
- Queue.java
- LinkedList.java
+ sorting
- MergeSort.java
+ bin
+ net
+ chris
+ dojo
- Program.class (should be here but missing because compilation fails)
+ datastructures
- Queue.class
- LinkedList.class
+ sorting
- MergeSort.class
Compilation for the classes in the "datastructures" and "sorting" packages is working fine. Here are the commands I used. The folder structure in the "bin" folder is automatically created by the compiler.
javac -d bin src\net\chris\dojo\datastructures\*.java
javac -d bin src\net\chris\dojo\sorting\*.java
The problem is when I try to compile "Program.java" (thats the test class I run from the command-line) the compiler is throwing errors, because it cannot find the packages "net.chris.dojo.datastructures" and "net.chris.dojo.sorting".
Here is the compilation command:
javac -d bin src\net\chris\dojo\Program.java
This is the output I get:
src\net\chris\dojo\Program.java:3: error: cannot find symbol
import net.chris.dojo.datastructures;
^
symbol: class datastructures
location: package net.chris.dojo
src\net\chris\dojo\Program.java:4: error: cannot find symbol
import net.chris.dojo.sorting;
^
symbol: class sorting
location: package net.chris.dojo
src\net\chris\dojo\Program.java:11: error: cannot find symbol
MergeSort.sort(values);
^
symbol: variable MergeSort
location: class Program
src\net\chris\dojo\Program.java:12: error: cannot find symbol
Queue queue = new Queue();
^
symbol: class Queue
location: class Program
src\net\chris\dojo\Program.java:12: error: cannot find symbol
Queue queue = new Queue();
^
symbol: class Queue
location: class Program
src\net\chris\dojo\Program.java:13: error: cannot find symbol
LinkedList list = new LinkedList();
^
symbol: class LinkedList
location: class Program
src\net\chris\dojo\Program.java:13: error: cannot find symbol
LinkedList list = new LinkedList();
^
symbol: class LinkedList
location: class Program
7 errors
Thats the code of my class files:
Queue.java
package net.chris.dojo.datastructures;
public class Queue {
...
}
LinkedList.java
package net.chris.dojo.datastructures;
public class LinkedList {
...
}
MergeSort.java
package net.chris.dojo.sorting;
public class MergeSort {
...
}
Program.java
package net.chris.dojo;
import net.chris.dojo.datastructures;
import net.chris.dojo.sorting;
public class Program {
public static void main(String[] args) {
int[] values = { 9, 4, 6, 2, 0, 3, 8, 1, 7, 5 };
MergeSort.sort(values);
Queue queue = new Queue();
LinkedList list = new LinkedList();
}
}
I would run it with this command:
java -cp bin net.chris.dojo.Program
I execute all commands in the root folder of the project.
Thanks for your help.
The solution was to include the classpath when compiling. That way it can find the packages it depends on.
javac -d bin -cp bin src\net\chris\dojo\Program.java
Thanks #BigMike for the solution.
Try change this in your Program class
import net.chris.dojo.datastructures;
import net.chris.dojo.sorting;
to
import net.chris.dojo.datastructures.*;
import net.chris.dojo.sorting.*;
And when you compile your Program.java use following command
javac -d bin src\net\chris\dojo\Program.java -classpath bin
I can't compile my Program.java from the command line (only in Eclipse).
When I want to compile it with
javac Program.java
"cannot find symbol" errors occur at JUnit classes.
Eclipse has the JUnit classes in it's plugins, but to compile it on my own I would need to somehow compile my JUnit.jar with the program. How can I do that? It doesn't seem to work with
javac -cp absolutePathTo\JUnitJar Program.java
Or is this problem maybe caused because the JUnit classes are not implemented in my (nested) new Thread classes?
C:\Documents and Settings\xxxx\Desktop\eclipse\xxxx\Program\src\da
ta>javac -cp junit-4.10.jar Testworks.java
Program.java:81: package org.junit.runner does not exist
import org.junit.runner.Description;
^
Program.java:82: package org.junit.runner does not exist
import org.junit.runner.JUnitCore;
^
Program.java:83: package org.junit.runner does not exist
import org.junit.runner.Request;
^
Program.java:84: package org.junit.runner does not exist
import org.junit.runner.Result;
^
Program.java:85: package org.junit.runner.notification does not exist
import org.junit.runner.notification.Failure;
^
Program.java:86: package org.junit.runner.notification does not exist
import org.junit.runner.notification.RunListener;
^
Program.java:253: cannot find symbol
symbol : class JUnitCore
location: class data.Program
JUnitCore jCore; //-> Core Runner - has no pleaseStop()
^
Program.java:254: cannot find symbol
symbol : class RunListener
location: class data.Program
RunListener jRl;
^
Program.java:255: cannot find symbol
symbol : class Request
location: class data.Program
Request jRq;
^
Program.java:2167: cannot find symbol
symbol : class RunListener
location: class data.Program
class RlOne extends RunListener{
^
Program.java:2170: cannot find symbol
symbol : class Description
location: class data.Program.RlOne
public void testRunStarted(Description descRun)
^
Program.java:2179: cannot find symbol
symbol : class Description
location: class data.Program.RlOne
public void testStarted(Description descStart)
^
Program.java:2185: cannot find symbol
symbol : class Description
location: class data.Program.RlOne
public void testFinished(Description descFinish)
^
Program.java:2202: cannot find symbol
symbol : class Failure
location: class data.Program.RlOne
public void testFailure(Failure failure)
^
Program.java:2211: cannot find symbol
symbol : class Description
location: class data.Program.RlOne
public void testIgnored(Description descIgno)
^
Program.java:2221: cannot find symbol
symbol : class Result
location: class data.Program.RlOne
public void testRunFinished(Result result)
^
Program.java:2422: cannot find symbol
symbol : variable Request
location: class data.Program.ThirdThread
jRq = Request.aClass(cRun);
^
Program.java:2426: cannot find symbol
symbol : variable Request
location: class data.Program.ThirdThread
jRq = Request.method(cRun, comb_meth.getSelected
Item().toString());
^
Program.java:2584: cannot find symbol
symbol : class JUnitCore
location: class data.Program
jCore = new JUnitCore();
^
19 errors
The java command output when I want to start it by the Eclipse compiled Program.class:
C:\Documents and Settings\xxxx\Desktop\eclipse\xxxx\Program\bin\da
ta>java Program
Exception in thread "main" java.lang.NoClassDefFoundError: Program
Caused by: java.lang.ClassNotFoundException: Program
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: Program. Program will exit.
While using javac command with external jar, you should use
javac -classpath path-to-external-jar/jarname1.jar;/path-to-external-jar2/jarname2.jar Program.java
same for java command:
java -classpath path-to-external-jar/jarname1.jar;/path-to-external-jar2/jarname2.jar Program
Now I got it to work.
I renamed junit-4.10.jar to junit.jar, moved it to another folder and somehow this solved the problem:
javac -classpath "C:\Documents and Settings\x\Desktop\eclipse\x\Program\extres\junit.jar" src\data\Program.java
BTW:
When I'm in C:\Documents and Settings\x\Desktop\eclipse\x\Program\ it also works with:
javac -classpath extres\junit.jar src\data\Program.java
You really need to learn more on the topic of the Java CLASSPATH. Your errors, both at compile and at run time, are due to you not providing the complete classpath.
Link is: http://people.apache.org/~ruchithf/hw-axis2/.
Command line is: javac -extdirs d:\lib\ D:\stub\src\org\apache\ws\axis2\*.java -d d:\clientcode\
The Error is:
C:\Program
Files\Java\jdk1.6.0\bin>javac -extdirs
d:\lib\ D:\stub\src\org\apache
\ws\axis2\*.java -d d:\clientcode\
D:\stub\src\org\apache\ws\axis2\Client.java:3:
cannot find symbol symbol : class
EchoRequest location: class
org.apache.ws.axis2.SimpleServiceStub
import
org.apache.ws.axis2.SimpleServiceStub.EchoRequest;
^
D:\stub\src\org\apache\ws\axis2\Client.java:12:
cannot find symbol symbol : class
EchoRequest location: class
org.apache.ws.axis2.Client EchoRequest
request = new
SimpleServiceStub.EchoRequest(); ^
D:\stub\src\org\apache\ws\axis2\Client.java:12:
cannot find symbol symbol : class
EchoRequest location: class
org.apache.ws.axis2.SimpleServiceStub
EchoRequest request = new
SimpleServiceStub.EchoRequest();
^ Note:
D:\stub\src\org\apache\ws\axis2\SimpleServiceStub.java
uses unchecked or u nsafe operations.
Note: Recompile with -Xlint:unchecked
for details. 3 errors C:\Program
Files\Java\jdk1.6.0\bin>javac -extdirs
d:\lib\ D:\stub\src\org\apache
\ws\axis2\*.java -d d:\clientcode\
D:\stub\src\org\apache\ws\axis2\Client.java:3:
cannot find symbol symbol : class
EchoRequest location: class
org.apache.ws.axis2.SimpleServiceStub
import
org.apache.ws.axis2.SimpleServiceStub.EchoRequest;
^
D:\stub\src\org\apache\ws\axis2\Client.java:12:
cannot find symbol symbol : class
EchoRequest location: class
org.apache.ws.axis2.Client EchoRequest
request = new
SimpleServiceStub.EchoRequest(); ^
D:\stub\src\org\apache\ws\axis2\Client.java:12:
cannot find symbol symbol : class
EchoRequest location: class
org.apache.ws.axis2.SimpleServiceStub
EchoRequest request = new
SimpleServiceStub.EchoRequest();
^ Note:
D:\stub\src\org\apache\ws\axis2\SimpleServiceStub.java
uses unchecked or u nsafe operations.
Note: Recompile with -Xlint:unchecked
for details. 3 errors
Check if the Axis library really is in D:\stub\src\org\apache\ws\
...and try using double-backslashes: D:\\stub\\src\\org\\apache\\ws and d:\\lib
I can't re-create your problem since I'm using Linux, and I remember Windows users having backslash issues sometimes.
IIRC, the axis stub generator is old, and generates pre 1.5 (maybe even pre 1.4) java source code. Try setting the source flag, and see what happens.