I am trying to run ANTLR C grammar file (DummyC.g) from command line to parse C source and header files (a.h). When I run it with antlr.jar file, it generates parser and lexer files. but when I compile test file Main.java. It gives error of missing ANTLR packages as shown below.
C:\antlr-2.7.6\test>javac Main.java
Main.java:1: package org.antlr.tool does not exist
import org.antlr.tool.;
^
Main.java:2: package org.antlr.runtime does not exist
import org.antlr.runtime.;
^
Main.java:3: package org.antlr.runtime.tree does not exist
import org.antlr.runtime.tree.;
^
Main.java:4: package org.antlr.stringtemplate does not exist
import org.antlr.stringtemplate.;
^
Main.java:8: cannot find symbol
symbol : class CommonTree
location: class Main
CommonTree tree = DummyCParser.start("a.h");
Main.java
import org.antlr.tool.*;
import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
import org.antlr.stringtemplate.*;
public class Main {
public static void main(String[] args) throws Exception {
CommonTree tree = DummyCParser.start("a.h");
DOTTreeGenerator gen = new DOTTreeGenerator();
StringTemplate st = gen.toDOT(tree);
System.out.println(st);
}
}
What could be the problem?
You're using the antlr runtime so you'll have to specify the antlr jar files as part of the classpath so the compiler can find the antlr classes you use e.g.
javac -classpath c:\java\antlr-3.3\lib\antlr-3.3-complete.jar Main.java
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 a following directory structure:
-com
-laicode
-class1
-QuickSort.java
-common
-someclasses
-test
-class1
-QuickSortTests.java
I want to import QuickSort class and classes in common package in QuickSortTests. So the code in QuickSort.java looks like:
package com.test.class1;
import java.util.Arrays;
import com.laicode.common.*;
import com.laicode.class1.QuickSort;
class QuickSortTests {
public static void main(String[] args) {
int[] array0 = null;
QuickSort.quickSort(array0);
System.out.println(Arrays.toString(array0));
int[] array1 = new int[0];
QuickSort.quickSort(array1);
...
When I complie QuickSortTests.java in cmd using javac QuickSortTests.java, it throws an error saying:
QuickSortTests.java:4: error: package laicode.common does not exist
import laicode.common.*;
QuickSortTests.java:5: error: package laicode.class1 does not exist
import laicode.class1.QuickSort;
But in Intellij, QuickSortTests can run without any errors.
IntelliJ already knows your source layout, and even what classes are defined in what files. javac doesn't. There are multiple ways you could approach the problem, depending in part on where you want the compiled class files to go, but the simplest approach would probably be to make the root of your source tree your working directory, and run javac from there:
javac com/test/class1/QuickSortTests.java
(Or use backslashes instead of forward slashes on Windows.)
Note capitalization: I have assumed that the mismatch between the capitalization of your class names and that of the names of the files in which they reside is an error in your question. If these actually do disagree in your sources then you should fix the discrepancy.
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'm trying to complete the first assignment of the Coursera course Algorithms I. As I'm using Linux, I followed the instructions on http://algs4.cs.princeton.edu/linux/ and created a ~/algs4 directory. The test programs seem to work; for example, the command
kurt#kurt-ThinkPad:~$ java-algs4 edu.princeton.cs.algs4.StdDraw
generates the image below.
Next, I'm trying to run a test program in a subdirectory of ~/algs4:
import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.StdDraw;
public class PercolationTest {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
However, if I try to compile this I get the following errors:
kurt#kurt-ThinkPad:~/algs4/PercolationTest$ javac PercolationTest.java
PercolationTest.java:3: error: package edu.princeton.cs.algs4 does not exist
import edu.princeton.cs.algs4.In;
^
PercolationTest.java:4: error: package edu.princeton.cs.algs4 does not exist
import edu.princeton.cs.algs4.StdDraw;
^
2 errors
This way of importing does seem consistent with what is explained on http://algs4.cs.princeton.edu/code/, so I'm having trouble seeing what I did wrong. Any ideas?
Following the examples on http://algs4.cs.princeton.edu/code/, I appended -algs4 to both the javac and java commands. Now it seems to work:
kurt#kurt-ThinkPad:~/algs4/PercolationTest$ javac-algs4 PercolationTest.java
kurt#kurt-ThinkPad:~/algs4/PercolationTest$ java-algs4 PercolationTest
Hello, world!
I am following a Java tutorial (left to my own devices to write the test code), but when trying to compile I get a symbol not found error. I've looked and looked, but cannot work out why the code I have written produces this error. It's probably very simple, but I'd appreciate someone pointing out the cause as I'm pulling my hair out trying to understand what I've done wrong!
TestBeerExpert.java:
package com.example.model;
import com.example.model.*;
import java.util.*;
public class TestBeerExpert {
public static void main(String[] args) {
TestBeerExpert test = new TestBeerExpert();
test.go();
}
private void go() {
BeerExpert expert = new BeerExpert();
List<String> brands = expert.getBrands("amber");
...
}
}
BeerExpert.java:
package com.example.model;
import java.util.*;
public class BeerExpert {
public List<String> getBrands(String color) {
List<String> brands = new ArrayList<String>();
...
return(brands);
}
}
Directory structure:
beerV1 -> src -> com -> example -> model -> TestBeerExpert.java & BeerExpert.java
Compiling from beerV1 with javac -d classes src/com/example/model/TestBeerExpert.java
And the actual error:
src/com/example/model/TestBeerExpert.java:14: error: cannot find symbol
BeerExpert expert = new BeerExpert();
^
symbol: class BeerExpert
location: class TestBeerExpert
src/com/example/model/TestBeerExpert.java:14: error: cannot find symbol
BeerExpert expert = new BeerExpert();
^
symbol: class BeerExpert
location: class TestBeerExpert
2 errors
For the life of me I can't work out what I'm doing wrong. The files are in the same directory and package, so as far as I am aware this should be compiling. I'd be grateful to now only have the code corrected but and explanation of what I have done wrong so I can remember it for the future. Thanks in advance.
Add src to your sourcepath
javac -sourcepath src -d classes src/com/example/model/TestBeerExpert.java
You need to do this because you execute javac from a different directory from where the sources are.
No need to compile BeerExpert first (javac will do it for you with the above command).
Validatation:
~/beerV1$ ls src/com/example/model/
BeerExpert.java TestBeerExpert.java
~/beerV1$ ls classes
~/beerV1$ javac -sourcepath src -d classes src/com/example/model/TestBeerExpert.java
~/beerV1$ ls classes/com/example/model/
BeerExpert.class TestBeerExpert.class
You are getting the compile error because compiler is not able to find BeerExpert class. Try below
1. first compile BeerExpert.java using :
javac -d classes src\com\example\model\BeerExpert.java
2. then compile TestBeerExpert.java
javac -cp classes -d classes src\com\example\model\TestBeerExpert.java