2011-12-04 40 views
60

Tôi đã làm theo hướng dẫn bắt đầu, nhưng bị kẹt sau khi tôi đã nhập dự án playn bằng Maven. Tôi đang sử dụng Eclipse Indigo chạy trên Windows 64bit 7.Thiếu com.sun giả tạo: công cụ: jar

Tất cả các dự án nhập khẩu có lỗi tương tự:

Missing Artifact com.sun:tools:jar in all the pom.xml files. 

Sau một vài giờ các diễn đàn tìm kiếm Tôi đã thử:

Cài đặt Java mới nhất 1.6.029 Thay đổi biến môi trường JAVA_HOME của mình để trỏ đến \program files\Java\jdk1.6_029 Thay đổi các tùy chọn Java Eclipse của tôi để sử dụng JRE jdk1.6_029.

Tôi thực sự muốn thử nghiệm với playn, nhưng tại sao có một vài bài viết tôi dường như không thể tìm thấy một câu trả lời consenus về giải pháp. Một số người nói rằng Sun đã loại bỏ thứ gì đó từ jd 64bit, một số khác nói rằng bạn phải chỉnh sửa các tệp xml của mình, nhiều người đã nói rằng bạn đã thay đổi JAVA_HOME và một người khác cho biết bạn phải thay đổi các tùy chọn VM cho Eclipse.

Bất kỳ trợ giúp nào về thanh toán bù trừ này sẽ được đánh giá cao và có thể hữu ích đối với nhiều người vì tôi không có thiết lập đặc biệt kỳ lạ ở đây.

(chỉnh sửa) Đây là tệp pom.xml trong dự án đầu tiên. Eclipse lỗi cờ trong dòng mà nói:

<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> 

    <parent> 
    <groupId>com.googlecode.playn</groupId> 
    <artifactId>playn-project</artifactId> 
    <version>1.1-SNAPSHOT</version> 
    </parent> 

    <artifactId>playn-android</artifactId> 
    <name>PlayN Android</name> 
    <packaging>jar</packaging> 

    <repositories> 
    </repositories> 

    <dependencies> 
    <dependency> 
     <groupId>com.googlecode.playn</groupId> 
     <artifactId>playn-core</artifactId> 
     <version>${project.version}</version> 
    </dependency> 

    <!-- needed because Android uses the same JSON code as playn-java; 
     that should be factored into a library shared by both backends --> 
    <dependency> 
     <groupId>com.googlecode.playn</groupId> 
     <artifactId>playn-java</artifactId> 
     <version>${project.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>com.google.android</groupId> 
     <artifactId>android</artifactId> 
     <version>${android.version}</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

    <build> 
    <sourceDirectory>src</sourceDirectory> 
    </build> 
</project> 
+0

Bạn có nhận được cùng một lỗi chạy maven từ dòng lệnh? – Raghuram

+0

Bạn có thể đăng pom.xml của mình không? –

+0

Tôi đã thêm tệp pom.xml. Tôi xin lỗi vì không biết làm thế nào để làm bất cứ điều gì với maven bằng cách sử dụng dòng lệnh. – boldinventions

Trả lời

24

Tôi chạy vào cùng một vấn đề và cách tôi đã có thể giải quyết nó là thêm vị trí phụ thuộc của tools.jar vào pom.xml. Cũng giống như vậy:

<dependency> 
    <groupId>com.sun</groupId> 
    <artifactId>tools</artifactId> 
    <version>1.6</version> 
    <scope>system</scope> 
    <systemPath>C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar</systemPath> 
</dependency> 

Hãy chắc chắn rằng bạn thay đổi <systemPath> đến nơi từng tập tin tools.jar của bạn nằm.

+31

Tôi rất khuyên bạn không nên làm điều này - nó giải quyết được vấn đề nhưng không thể chuyển sang các nhà phát triển khác hoặc xây dựng môi trường. Xem các câu trả lời khác, họ dường như làm thủ thuật –

+0

có thể thay đổi ** systemPath ** thành $ {java.home} /lib/plugin.jar

+0

http://stackoverflow.com/questions/3080437/ tốt hơn jdk-tools-jar-as-maven-dependency có cách thực hiện điều này theo cách di động. – vorburger

1

Trong tab POM hiệu dụng của tệp pom, tôi thấy đường dẫn sau đây: C:\Program Files\Java\jre6/../lib/tools.jar và tôi nghĩ rằng đó không phải là một đường dẫn hợp lệ trong Windows. Tôi đã thử sao chép tools.jar trong thư mục jre6/lib cũng như trong Java/lib mà không thành công.

Giá trị "C: \ Program Files \ Java \ jre6" xuất phát từ registry

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_30 
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6 

Và thiết lập các khóa JavaHome đến nơi jdk của bạn JRE đã được cài đặt. Sau đó tất cả các lỗi trình biên dịch biến mất.

Cài đặt lại JDK không khắc phục được. Đặt biến môi trường hệ thống JAVA_HOME hoặc java.home không giúp được gì.

Cách thay thế khác mà tôi đã thấy là thêm phụ thuộc với đường dẫn đúng trong mỗi tệp xml pom, nhưng các mẫu playn có rất nhiều tệp gây đau đớn vô cùng cần chỉnh sửa.

Đây là kết quả POM hiệu quả, hiển thị đường dẫn WRONG!

<dependency> 
     <groupId>com.sun</groupId> 
     <artifactId>tools</artifactId> 
     <version>1.6</version> 
     <scope>system</scope> 
     <systemPath>C:\Program Files\Java\jre6/../lib/tools.jar</systemPath> 
     <optional>true</optional> 
    </dependency> 
-1

Thay đổi vị trí tương đối của ${java.home}/../lib/tools.jar đến đường dẫn tuyệt đối của C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar công trình đối với tôi.

Bạn chỉ phải thay đổi số điện thoại trong số playn/pom.xml.

Bây giờ đối với các mẫu phát, Vladiator đúng, có quá nhiều tệp pom để thay đổi.

48

Tôi vừa đăng trên this question về cùng một vấn đề này và cách tôi giải quyết nó, nhưng tôi sẽ dán (và mở rộng) ở đây là tốt, vì nó có vẻ phù hợp hơn.

Tôi đã gặp vấn đề tương tự khi sử dụng Eclipse trong Windows 7, ngay cả khi tôi đã xóa JRE khỏi danh sách các JRE trong cài đặt Eclipse và chỉ có JDK ở đó.

gì tôi đã kết thúc phải làm (như bạn đề cập trong câu hỏi của bạn) đã sửa đổi các dòng lệnh cho các phím tắt tôi sử dụng để khởi động Eclipse để thêm đối số -vm để nó như vậy:

-vm "T:\Program Files\Java\jdk1.6.0_26\bin" 

Tất nhiên, bạn sẽ điều chỉnh để trỏ đến thư mục bin của cài đặt JDK JDK của bạn. Điều này làm cho bản thân Eclipse đang chạy bằng cách sử dụng JDK thay vì JRE, và sau đó nó có thể tìm thấy tools.jar đúng cách.

Tôi tin rằng điều này liên quan đến cách Eclipse tìm JRE mặc định của nó khi không có chỉ định nào được chỉ định. Tôi đoán nó có xu hướng thích JRE hơn JDK (tại sao, tôi không biết) và đi cho JRE tương thích đầu tiên nó tìm thấy. Và nếu nó tắt các khóa registry của Windows như câu trả lời của Vladiat0r, nó sẽ tìm khóa HKLM\Software\JavaSoft\Java Runtime Environment trước thay vì phím HKLM\Software\JavaSoft\Java Development Kit.

+9

Điều này làm việc cho chúng tôi trong Windows 7. Chúng tôi đã phải sửa đổi phím tắt để thêm đối số -vm "..." thay vì sử dụng eclipse.ini. Ngoài ra, chúng tôi đã phải nhập lại dự án maven của chúng tôi vào vùng làm việc trước khi lỗi sẽ biến mất. –

+2

Tương tự ở đây - không có xúc xắc với .ini, nhưng vm arg trong cmdline đã hoạt động. –

+1

Tôi đã chỉnh sửa câu trả lời để giải thích cách thay đổi eclipse.init. Nguồn: https://wiki.eclipse.org/Eclipse.ini#-vm_value:_Windows_Example – OGrandeDiEnne

-1

Nếu bạn đang sử dụng openjdk thì bạn cần cài đặt gói openjdk-6-sdk.

19

Tôi đã gặp rắc rối tương tự khi phát triển một ứng dụng dịch vụ web đơn giản, trong trường hợp của tôi, tôi phải thêm một plug-in mã hóa để nhận các thư viện jaxws. Tuy nhiên, maven pom tiếp tục hỏi về các tập tin jar công cụ.

tôi phải nói ý kiến ​​trên là đúng, bạn có thể bao gồm các mục dưới đây trong tập tin pom:

<dependency> 
    <groupId>com.sun</groupId> 
    <artifactId>tools</artifactId> 
    <version>1.6</version> 
    <scope>system</scope> 
    <systemPath>C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar</systemPath> 
</dependency> 

Nhưng, những gì nó sẽ xảy ra khi bạn có để triển khai đến một trường hợp sản xuất? Bạn có thể thay thế đường dẫn bằng tham chiếu đến biến môi trường hệ thống nhưng điều đó vẫn không có vẻ tốt, ít nhất là với tôi.

tôi tìm thấy một giải pháp trong một chú thích StackOverflow:

Maven 3 Artifact problem

<dependency> 
    <groupId>org.apache.struts</groupId> 
    <artifactId>struts2-core</artifactId> 
    <version>${struts2.version}</version> 
    <exclusions> 
     <exclusion> 
      <artifactId>tools</artifactId> 
      <groupId>com.sun</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Họ đề nghị bao gồm một tuyên bố loại trừ cho công cụ jar và nó hoạt động. Vì vậy, tóm tắt: bạn có thể bao gồm một quy tắc loại trừ trong phạm vi phụ thuộc của bạn và tránh gặp vấn đề tool.jar:

<exclusions> 
      <exclusion> 
       <artifactId>tools</artifactId> 
       <groupId>com.sun</groupId> 
      </exclusion> 
     </exclusions> 
+1

Gợi ý: sử dụng 'mvn dependency: tree' để tìm vị trí chèn loại trừ của bạn. – Lars

0

tôi đã cùng một vấn đề trên Windows 7 và Eclipse 3.7 Tôi cố gắng sửa chữa nó bằng cách bắt đầu

eclipse.exe -vm "D:\JDK6\bin"

Bạn có thể bắt đầu một cmd và khởi động nhật thực như vậy hoặc bạn có thể chỉnh sửa phím tắt và thêm -vm "D: \ JDK6 \ bin" làm đối số trong "mục tiêu".

Là một sidenote, tôi cũng đã cố gắng thêm -vm "D: \ JDK6 \ bin" vào eclipse.ini nhưng không hoạt động. Và việc thêm JRE6 sẽ không hoạt động vì nó KHÔNG chứa tools.jar trong thư mục "lib" của nó. Chỉ có JDK.

4

Cùng với tôi và Windows 7. Tôi đã kết thúc việc thêm hai dòng để eclipse.ini:

-vm 
C:\Program Files\Java\jdk1.6.0_35\bin 

tôi đã cố gắng sử dụng %JAVA_HOME% ở đó, nhưng nó đã không làm việc.

+0

Lưu ý cho tôi trong tương lai: điều này phải ở trước dòng '-vmargs', vì mọi thứ trong quá khứ sẽ được hiểu là VM khởi động arg. Vì vậy: ngay trước đó! – eis

1

Thêm phụ thuộc này vào tệp pom.xml. Hy vọng điều này giúp đỡ.
Trong <systemPath> tài sản mà bạn phải viết jdk của bạn con đường lib ..

<dependency> 
      <groupId>com.sun</groupId> 
      <artifactId>tools</artifactId> 
     <version>1.4.2</version> 
     <scope>system</scope> 
     <systemPath>C:/Program Files/Java/jdk1.6.0_30/lib/tools.jar</systemPath> 
     </dependency> 
0

Đã kết thúc sử dụng sửa chữa eclipse.ini:

openFile 
-vm (Your Java Home JDK here) 

Ví dụ, -vm C:\Java\JDK\1.6.

Đã cũng thay đổi JRE để JDK:

Trong Eclipse IDE đi:

  1. Window -> Preferences -> JRE cài đặt
  2. Bấm vào Add (để xác định vị trí JRE mới)
  3. Chọn JVM chuẩn -> next
  4. Nhấp vào Thư mục để định vị nhà JRE, đặt JDK_INSTALL_LOCATION và kết thúc.
  5. Chuyển đến thuộc tính của dự án java -> Đường dẫn xây dựng Java -> Thư viện -> chọn JRE -> Chỉnh sửa -> chọn JRE mặc định của không gian làm việc -> kết thúc
  6. Thực hiện dọn dẹp toàn bộ không gian làm việc với dự án -> sạch.
6

Tôi đã giải quyết vấn đề này trong cài đặt Eclipse 4.3 - chỉ bằng cách thêm thư viện JDK vào thư viện của JRE.

Go cửa sổ -> Cài đặt -> Java -> JRE cùng cài đặt -> chọn JDK và nhấp vào Edit -> bấm Add lọ bên ngoài và thêm tools.jar (đặt trong JDK/lib)

2

Sau khi gặp khó khăn trong một thời gian Cuối cùng tôi đã làm việc này với eclipse.ini thay vì dòng lệnh. Sau cuối cùng đọc documentation tôi nhận ra rằng lập luận -vm phải nằm trên một dòng riêng biệt, không thể viện chứng, và trước bất kỳ -vmargs:

-vm 
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe 
0

Như áp phích khác đã nêu vấn đề ở đây đã làm với JRE mà nhật thực đang sử dụng không thể tìm thấy các công cụ jar. Tôi giải quyết vấn đề bằng cách đi theo một hướng khác so với những gì đã nêu ở trên, và đó là vì cách mà các dự án và môi trường của tôi.

Eclipse 4.5 yêu cầu ít nhất Java 7 cho thời gian chạy, vì vậy tôi đã thiết lập hệ thống của mình để sử dụng Java 8 JRE đặt tại C: \ java \ jre1.8.0_45.

Tiếp theo, tôi đang sử dụng tệp POM giả định rằng tôi đang chạy với Java 6 JDK.

<profiles> 
    <profile> 
     <id>default-profile</id> 
     <activation> 
     <activeByDefault>true</activeByDefault> 
     <file> 
      <exists>${java.home}/../lib/tools.jar</exists> 
     </file> 
     </activation> 
     <properties> 
     <toolsjar>${java.home}/../lib/tools.jar</toolsjar> 
     </properties> 
    </profile> 
    <profile> 
     <id>osx_profile</id> 
     <activation> 
     <activeByDefault>false</activeByDefault> 
     <os> 
      <family>mac</family> 
     </os> 
     </activation> 
     <properties> 
     <toolsjar>${java.home}/../Classes/classes.jar</toolsjar> 
     </properties> 
    </profile> 
    </profiles> 

    <dependencies> 
    <dependency> 
     <groupId>com.sun</groupId> 
     <artifactId>tools</artifactId> 
     <version>1.6.0</version> 
     <scope>system</scope> 
     <systemPath>${toolsjar}</systemPath> 
    </dependency> 
    </dependencies> 

Tôi không được phép thay đổi tệp POM, vì vậy tôi phải thực hiện một số hoạt động vui nhộn. Tôi đã sao chép tools.jar từ JDK Java 6 của mình, tạo thư mục C: \ java \ lib và dán nó ở đó. Sau đó tôi khởi động lại nhật thực và làm sạch dự án của mình. Và lỗi VOILA đã biến mất.

Nó không phải là một giải pháp thanh lịch, và tôi nghĩ rằng giải pháp thích hợp sẽ là thay đổi cách thiết lập POM, nhưng như tôi đã không thể, điều này hoạt động.

9

Không có câu trả lời nào khác cho tôi. Điều gì đã làm đó là để kiểm tra "phụ thuộc hệ thống cấp bậc" của pom.xml trong nhật thực, nơi đưa ra một bộ lọc 'công cụ' tiết lộ rằng tôi đã có một sự phụ thuộc thực để tools.jar:

Eclipse View

Vì vậy, thủ phạm đối với tôi là thế này:

<dependency> 
    <groupId>com.github.markusbernhardt</groupId> 
    <artifactId>robotframework-selenium2library-java</artifactId> 
    <version>1.4.0.7</version> 
    <scope>test</scope> 
</dependency> 

Thêm một loại trừ cố định nó:

<dependency> 
    <groupId>com.github.markusbernhardt</groupId> 
    <artifactId>robotframework-selenium2library-java</artifactId> 
    <version>1.4.0.7</version> 
    <scope>test</scope> 
    <exclusions> 
     <exclusion> 
      <artifactId>tools</artifactId> 
      <groupId>com.sun</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Việc loại trừ dường như không có bất cứ nhược điểm với nó.

+1

tuyệt vời .. giải pháp này cuối cùng đã làm việc cho tôi. cảm ơn. –

+1

Làm việc cho tôi, vấn đề phát sinh khi nâng cấp một java 6 codebase lên java 8 – jasonoriordan

+1

Điều đó cũng giúp tôi. Thanks @eis – Sanchit

0

Sau khi thử tất cả những điều trên, tôi vẫn gặp sự cố tương tự.

  • môi trường PATH biến điểm đến JDK 1.7 \ bin
  • biến môi trường JAVA_HOME của tôi đã chỉ vào JDK 1,7
  • eclipse.ini tôi có entry trỏ javaw -vm để JDK 1,7
  • nhật thực của tôi sở thích có JDK 1.7 là JRE được cài đặt.
  • Đường dẫn xây dựng dự án của tôi đang sử dụng JDK 1.7.

Sau đó, tôi đã cố gắng sau,

  • Mở một dấu nhắc lệnh và gõ java -version. Nó cho tôi thấy một phiên bản JRE 1.8.

  • Mở lời nhắc lệnh và đi đến vị trí của thư mục bin JDK 1.7 và nhập java -version. Lần này nó cho thấy chính xác 1.7.

Sau đó, sau khi đào tại một số địa điểm, tôi thấy rằng ngoài các vị trí trên có các vị trí bổ sung cho thời gian chạy Java.

Registry

Ngoài ra còn có một khóa registry nơi JRE vị trí được quy định dưới

HKLM\Software\Javasoft\Version

Tôi đã thay đổi các mục ở đây để trỏ đến JDK 1.7

ProgramData

Các thư mục "C: \ ProgramData \ Oracle \ Java \ javapath" hiện diện trong biến môi trường PATH và chứa các phím tắt cho java, javaw vv ... Mục tiêu cho các phím tắt đều là JRE 1.8. (Điều này tôi nghĩ là vấn đề chính) Tôi đã thay đổi các phím tắt để trỏ đến đúng JDK exe.

Sau khi tất cả điều này được thực hiện. Tôi đã mở nhật thực tất cả các lỗi jdk.tools pom.xml biến mất.

0

Tôi gặp sự cố này và hóa ra JBossDevStudio 9.1 trên Windows là chương trình 32 bit. Eclipse, và do đó JBossDevStudio, không hoạt động với loại JVM sai. Nhật thực 64 bit cần một JVM 64 bit, nhật thực 32 bit cần một JVM 32 bit. Vì vậy, việc cấu hình Eclipse để chạy với JDK 64-bit đã cài đặt của tôi đã không hoạt động.

Cài đặt JDK 32 bit và chạy Eclipse từ đó đã giải quyết được sự cố.

Ít nhất đối với một trong các dự án của tôi, một nơi khác mà tôi đã cố định cấu hình JDK thời gian chạy trong thuộc tính dự án Eclipse vẫn bị hỏng.

2

Kiểm tra phiên bản jdk trên máy tính của bạn và trong pom.xml cả nên cùng

<dependency> 
     <groupId>com.sun</groupId> 
     <artifactId>tools</artifactId> 
     <version>1.8</version> 
     <scope>system</scope> 
     <systemPath>C:\Program Files\Java\jdk1.8.0_60\lib\tools.jar</systemPath> 
    </dependency> 
0

tôi giải quyết vấn đề bằng cách gỡ bỏ cài đặt JRE từ hệ thống của tôi và chỉ để lại JDK. Cài đặt lại JDK là không đủ bởi vì Oracle JDK cài đặt cài đặt cả JDK và JRE

BTW, có vẻ như với tôi rằng lỗi này có nhiệm vụ khó khăn: java.home of the Eclipse JRE is used instead of the build JRE

Các vấn đề liên quan