Nikki Erwin Ramirez
Nikki Erwin Ramirez

Reputation: 9934

How do you address the issue of a missing tools.jar in a JDK in Mac OS X?

From my searching, I found supporting information here: Java Development Guide for Mac OS X

tools.jar does not exist. Classes usually located here are instead included in classes.jar. Scripts that rely on the existence of tools.jar need to be rewritten accordingly.

If a rewrite is inevitable, how does that go?

This problem was encountered while deploying on Tomcat 6 installed via MacPorts on a Mac OS X 10.6 machine.

Upvotes: 14

Views: 22185

Answers (7)

Erik Ostermueller
Erik Ostermueller

Reputation: 508

Can't find any references to it on the interweb, but my Mac 1.7 and 1.8 jdk's now have tools.jar.

/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home/lib/tools.jar /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/lib/tools.jar /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/lib/tools.jar /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/lib/tools.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/lib/tools.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/lib/tools.jar /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar

classes.jar is only present in mac 1.6 jdk.

--Erik

Upvotes: 0

Ray Hunter
Ray Hunter

Reputation: 15557

This is similar to Bruno's answer above; however, I am not a big fan of symlinking the absolute path. Here is how I handle the symlinks:

cd /Library/Java/JavaVirtualMachines/<jdk version>/Contents/Home
sudo ln -s lib Classes

cd lib/
sudo ln -s tools.jar classes.jar

That makes it easier then symlinking absolute paths.

Upvotes: 4

tintin
tintin

Reputation: 5867

I faced the same problem, and resolved it differently.

  • First check that the java_home is set as /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents and not /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
  • Add the cobertura plugin, make sure systemPath is correctly ref the location of classes.jar

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.6</version>
            <dependencies>
                <dependency>
                    <groupId>com.sun</groupId>
                    <artifactId>tools</artifactId>
                    <version>1.6</version>
                    <scope>system</scope>
                    <systemPath>${java_home}/Classes/classes.jar</systemPath>
                </dependency>
            </dependencies>
        </plugin>
    
  • Add the dependency and exclude tools

        <dependency>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.6</version>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>com.sun</groupId>
                <artifactId>tools</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  • Finally add the following profiles

    <profiles>
    <profile>
        <id>standard-jdk</id>
        <activation>
            <file>
                <exists>${java_home}/Home/lib/tools.jar</exists>
            </file>
        </activation>
        <properties>
            <tools-jar>${java_home}/Home/lib/tools.jar</tools-jar>
        </properties>
    </profile>
    <profile>
        <id>apple-jdk</id>
        <activation>
            <file>
                <exists>${java_home}/Classes/classes.jar</exists>
            </file>
        </activation>
        <properties>
            <tools-jar>${java_home}/Classes/classes.jar</tools-jar>
        </properties>
    </profile>
    

Now run maven and it should successfully generate the Cobertura reports!

Upvotes: 0

Chris Hinshaw
Chris Hinshaw

Reputation: 7275

Edit to Bruno's answer which was finally what worked for me after quite a bit of maven trial and error.

If you are using 1.7 then you should be able to change revision to 1.7. I do not know if this is still a problem in Java 1.7 though.

sudo sh -c '$(j_home=$(/usr/libexec/java_home -v 1.6) && ln -sf ${j_home}/../Classes/classes.jar ${j_home}/../Classes/tools.jar && ln -sf ${j_home}/../Classes ${j_home}/../lib)'

Upvotes: 0

Bruno Jullien
Bruno Jullien

Reputation: 91

Here is my tested solution, which implies no change in maven config, just add symbolic links:

  • ln -s /Library/Java/JavaVirtualMachines/1.6.0_38-b04-436.jdk/Contents/Home/../Classes/classes.jar /Library/Java/JavaVirtualMachines/1.6.0_38-b04-436.jdk/Contents/Home/../Classes/tools.jar
  • ln -s /Library/Java/JavaVirtualMachines/1.6.0_38-b04-436.jdk/Contents/Home/../Classes /Library/Java/JavaVirtualMachines/1.6.0_38-b04-436.jdk/Contents/Home/../lib

Enjoy! Bruno

Upvotes: 8

sourcedelica
sourcedelica

Reputation: 24047

Instead of using Tomcat from Macports download Tomcat from Apache.

6.0: http://tomcat.apache.org/download-60.cgi

7.0: http://tomcat.apache.org/download-70.cgi

Upvotes: 1

user unknown
user unknown

Reputation: 36250

Well, you search for 'tools.jar', with grep for instance. If the place where classes.jar is, where tools.jar was expected, you could just change the word.

Another idea is, to create a symbolic link from classes.jar to tools.jar, if you have enough privileges and the file system(s) on MacOS support this. Else: copy. Might be more easy, but not be forgotten for updates, maybe.

Upvotes: 1

Related Questions