Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to find a javac compiler

Tags:

java

war

ant

I am trying to package my web application into war file using Ant.

When I build, I am getting the following error:

C:\Documents and Settings\Administrator\workspace\Assignment7\build.xml:67: Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK. It is currently set to "C:\Program Files\Java\jre6" 

The following is my build.xml

<?xml version="1.0" encoding="UTF-8"?> <project name="Generate War" default="install" basedir=".">       <property name="build.dir" value="build"/>     <property name="dir.name" value="Assignment7"/>     <property name="package.name" value="${dir.name}.war"/>      <property name="content" value="webContent"/>     <property name="web-inf" value="${content}\WEB-INF"/>     <property name="meta-inf" value="${content}\META-INF"/>     <property name="jsp.dir.name" value="${content}"/>      <property name="lib" value="${web-inf}\lib"/>     <property name="src" value="src"/>     <property name="dest.dir" value="target"/>      <!-- Setting path to the server webapp folder -->      <property name="webapp.dir" value="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps"/>      <!--  Using temp folder for convinence -->      <property name="temp.dir" value="temp"/>     <property name="temp.dir.web-inf" value="${temp.dir}\WEB-INF"/>     <property name="temp.dir.meta-inf" value="${temp.dir}\META-INF"/>     <property name="temp.dir.lib" value="${temp.dir.web-inf}\lib"/>     <property name="temp.dir.classes" value="${temp.dir.web-inf}\classes"/>     <!--<property name="temp.dir.classes.dir" value="${temp.dir.classes}\**"/>-->      <property name="package.file" value="${dest.dir}\${package.name}"/>      <path id="build.class.path">         <fileset dir="${lib}">             <include name="**/*.jar"/>         </fileset>     </path>     <path id="build.class.path1">         <fileset dir="C:\program files\java\jre6\lib">             <include name="**/*.jar"/>         </fileset>      </path>      <target name="clean">         <delete>             <fileset dir="${dest.dir}" includes="**/*"/>         </delete>         <delete dir="${temp.dir}"/>         <delete dir="${temp.dir.classes}"/>         <delete dir="${temp.dir.web-inf}"/>         <delete dir="${temp.dir.meta-inf}"/>     </target>       <target name="prepare" depends="clean">         <mkdir dir="${dest.dir}"/>         <mkdir dir="${temp.dir}"/>         <mkdir dir="${temp.dir.web-inf}"/>         <mkdir dir="${temp.dir.lib}"/>         <mkdir dir="${temp.dir.classes}"/>         <mkdir dir="${temp.dir.meta-inf}"/>     </target>      <target name="compile" depends="prepare">         <echo>==="complie"===</echo>         <javac srcdir="${src}" destdir="${temp.dir.classes}" debug="on">             <classpath refid="build.class.path"></classpath>          </javac>         <!--<copydir src="${build.dir}\classes" dest="${temp.dir.classes}"/>-->     </target>      <target name="package" depends="compile">         <echo>"PACKAGING THE FILES"</echo>             <copy file="${meta-inf}\MANIFEST.MF" tofile="${temp.dir.meta-inf}\MANIFEST.MF" overwrite="true"/>             <copy file="${web-inf}\web.xml" tofile="${temp.dir.web-inf}\web.xml" overwrite="true"/>             <copy file="${web-inf}\tiles.xml" tofile="${temp.dir.web-inf}\tiles.xml" overwrite="true"/>             <copy todir="${temp.dir.classes}">                 <fileset dir="${src}">                     <include  name="**/*.xml"/>                 </fileset>             </copy>              <war destfile="${package.file}" webxml="${temp.dir.web-inf}\web.xml" basedir="${temp.dir}">                 <fileset dir="${jsp.dir.name}"/>                 <lib dir="${lib}"></lib>                 <classes dir="${temp.dir.classes}"></classes>             </war>     </target>      <target name="jsps">             <copy todir="${webapp.dir}\${dir.name}">                 <fileset dir="${content}">                     <include name="**/*.jsp"/>                     <include name="**/*.html"/>                     <include name="**/*.css"/>                     <include name="**/*.gif"/>                     <include name="**/*.jpg"/>                     <include name="**/*.png"/>                     <include name="**/*.js"/>                 </fileset>             </copy>     </target>      <target name="install" depends="package">             <copy file="${package.file}" todir="${webapp.dir}" overwrite="true"/>     </target>  </project> 

How can I compile a class file that does not have a main class?

How do I set the class path?

For reference, I am using Eclipse.

like image 493
Sarin Jacob Sunny Avatar asked Dec 06 '11 13:12

Sarin Jacob Sunny


People also ask

Where is javac compiler located?

MyClass should be in C:\workspace\com\mysoft\mypack\MyClass. java. By default, the compiler puts each class file in the same directory as its source file. You can specify a separate destination directory with -d (see Options, below).

Is javac a Java compiler?

Java is considered as both interpreted and compiled. It uses a Java compiler (javac) and JVM ( which is actually a software-based interpreter) to execute a Java application on a machine completely.

Does javac come with JDK?

Java Development Kit (JDK) is a software development environment used for developing Java applications and applets. It includes the Java Runtime Environment (JRE), an interpreter/loader (Java), a compiler (javac), an archiver (jar), a documentation generator (Javadoc), and other tools needed in Java development.

Why is Java compiler not working?

It means that javac.exe executable file, which exists in bin directory of JDK installation folder is not added to PATH environment variable. You need to add JAVA_HOME/bin folder in your machine's PATH to solve this error. You cannot compile and run Java program until your add Java into your system's PATH variable.


2 Answers

All your ant stuff will work fine except the javac task which needs the tools.jar, located in the /lib directory from the JDK, JRE is not sufficient in that case. Therefore the hint from ant : "Unable to find a javac compiler;..."

When working with Eclipse the default setting points to your JRE installation.
So, one of your first steps after starting Eclipse for the first time should be :
Window > Preferences > Java > Installed JREs and change the settings from JRE to JDK.
Alternatively use :
Window > Preferences > Ant > Runtime > Classpath > Global Entries
and add the tools.jar from your JDK/lib folder

like image 139
Rebse Avatar answered Oct 06 '22 21:10

Rebse


I had the same problem. In my case, I fixed it by pointing JAVA_HOME to the JDK folder, rather than the JDK\bin folder.

like image 25
Umar Farooq Khawaja Avatar answered Oct 06 '22 23:10

Umar Farooq Khawaja