A little background first.
I've been using Maven even before the 1.0 release, and have been
very happy
with it. I've created very complex builds and have a very good working
knowledge of Maven 1.x. The structure I describe below, is
precisely how
I've successfully built projects with Maven 1.x countless times.
I'm starting a whole new project, and would like to see if Maven 2
is going
to be something I want to use.
Now on to my problem. Maven 2 cannot find the Javac Compiler that I
believe
I pointed it to.
I'm running the latest Maven download, version 2.0, on Windows XP
I've created two project modules :
csi_build
csi_common
csi_common contains my first simple project I'd like to build with
Maven 2
csi_build contains my Maven 2 binaries, AND a number of JDKs I use
for
builds. I store my JDKs in version control (Subversion), as some
deployments
require different versions of the JDK and because I want anyone to
be able
to pull down the latest code from the repository and immediately be
able to
execute a build, even if they don't have the JDK installed.
I simply go to the csi_common directory and execute the following
build.batfile
===============================================
echo off
set
JAVA_HOME=C:\CSI\eclipse_workspaces\CSI\csi_build\src\tools\jdk
\jdk1.5.0_04
set
MAVEN_HOME=C:\CSI\eclipse_workspaces\CSI\csi_build\src\tools\maven
\maven-2.0
set PATH=%JAVA_HOME%\bin;%MAVEN_HOME%\bin;%PATH%
echo PATH=%PATH%
mvn package -e
===============================================
Here's my simple pom.xml for csi_common
===============================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.csi.common</groupId>
<artifactId>csi_common</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>
<build>
<sourceDirectory>src/java</sourceDirectory>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
===============================================
The output complains "Unable to locate the Javac Compiler in:
C:\jre1.5.0_04\..\lib\tools.jar"
Here's the output:
===============================================
C:\CSI\eclipse_workspaces\CSI\csi_common>echo off
PATH=C:\CSI\eclipse_workspaces\CSI\csi_build\src\tools\jdk
\jdk1.5.0_04\bin;
C:\CSI\eclipse_workspaces\CSI\csi_build\src\tools\maven\maven-2.0\bin;
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
+ Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO]
----------------------------------------------------------------------
------
[INFO] Building Maven Quick Start Archetype
[INFO] task-segment: [package]
[INFO]
----------------------------------------------------------------------
------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
Compiling 4 source files to
C:\CSI\eclipse_workspaces\CSI\csi_common\target\classes
[INFO]
----------------------------------------------------------------------
------
[ERROR] BUILD FAILURE
[INFO]
----------------------------------------------------------------------
------
[INFO] Compilation failure
Unable to locate the Javac Compiler in:
C:\jre1.5.0_04\..\lib\tools.jar
Please ensure you are using JDK 1.4 or above and
not a JRE (the com.sun.tools.javac.Main class is required).
In most cases you can change the location of your Java
installation by setting the JAVA_HOME environment variable.
[INFO]
----------------------------------------------------------------------
------
[INFO] Trace
org.apache.maven.BuildFailureException: Compilation failure
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(
DefaultLifecycleExecutor.java:540)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLif
ecycle
(DefaultLifecycleExecutor.java:469)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(
DefaultLifecycleExecutor.java:448)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHand
leFailures
(DefaultLifecycleExecutor.java:301)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegment
s(
DefaultLifecycleExecutor.java:268)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(
DefaultLifecycleExecutor.java:137)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:316)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:113)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:249)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.codehaus.classworlds.Launcher.launchEnhanced
(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode
(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.plugin.CompilationFailureException:
Compilation
failure
at org.apache.maven.plugin.AbstractCompilerMojo.execute(
AbstractCompilerMojo.java:429)
at org.apache.maven.plugin.CompilerMojo.execute
(CompilerMojo.java:110)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(
DefaultPluginManager.java:399)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(
DefaultLifecycleExecutor.java:519)
... 16 more
[INFO]
----------------------------------------------------------------------
------
[INFO] Total time: 1 second
[INFO] Finished at: Fri Dec 02 08:50:54 CST 2005
[INFO] Final Memory: 3M/6M
[INFO]
----------------------------------------------------------------------
------
===============================================
Why in the world is the Maven code looking for anything in C:
\jre1.5.0_04
???
if I issue "set JAVA_HOME" from the command line, I get:
===============================================
C:\CSI\eclipse_workspaces\CSI\csi_common>set JAVA_HOME
JAVA_HOME=C:\CSI\eclipse_workspaces\CSI\csi_build\src\tools\jdk
\jdk1.5.0_04
===============================================
and here's my path:
===============================================
C:\CSI\eclipse_workspaces\CSI\csi_common>set PATH
Path=C:\CSI\eclipse_workspaces\CSI\csi_build\src\tools\jdk
\jdk1.5.0_04\bin;
C:\CSI\eclipse_workspaces\CSI\csi_build\src\tools\maven\maven-2.0\bin;
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
===============================================
Also, if I issue "javac" from the command line, I get:
===============================================
C:\CSI\eclipse_workspaces\CSI\csi_common>javac
Usage: javac <options> <source files>
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about what the
compiler is
doing
-deprecation Output source locations where
deprecated APIs
are used
-classpath <path> Specify where to find user class files
-cp <path> Specify where to find user class files
-sourcepath <path> Specify where to find input source files
-bootclasspath <path> Override location of bootstrap class
files
-extdirs <dirs> Override location of installed extensions
-endorseddirs <dirs> Override location of endorsed
standards path
-d <directory> Specify where to place generated class
files
-encoding <encoding> Specify character encoding used by
source files
-source <release> Provide source compatibility with
specified
release
-target <release> Generate class files for specific VM
version
-version Version information
-help Print a synopsis of standard options
-X Print a synopsis of nonstandard options
-J<flag> Pass <flag> directly to the runtime
system
===============================================
So, I KNOW javac is in the path.
Can anyone shed some light on what I may be doing wrong?
Sincerely,
Matthew Wheaton