왜 ANT는 JAVA_HOME이 틀렸다고 말합니까?
오류가 발생합니다.
C : \ dev \ ws \ springapp \ build.xml : 81 : javac 컴파일러를 찾을 수 없습니다. com.sun.tools.javac.Main이 클래스 경로에 없습니다. 아마도 JAVA_HOME이 JDK를 가리 키지 않을 것입니다. 현재 "C : \ Program Files \ Java \ jre6"로 설정되어 있습니다.
하지만 JAVA_HOME을 C : \ Program Files \ Java \ jdk1.6.0_14로 명확하게 설정했습니다.
ANT는이 값을 어디에서 얻습니까?
JAVA_HOME을 "C : \ Program Files \ Java \ jdk1.6.0_14"로 "명확하게 설정"했다고 말하면 명령 줄에서 "set"을 실행할 때 표시되는 내용입니까? 나는 하나가 전혀 설정되지 않은 경우 Ant가 JAVA_HOME의 값을 추측 할 것이라고 생각합니다 ... JAVA_HOME 대신 JAVAHOME을 설정했을 수 있습니까?
그렇지 않다면 ant.bat
배치 파일 을 편집하여 (그리고 그것이 호출하는 것이 무엇이든간에-그것이 복잡한 지 아닌지를 기억할 수 없습니다) 처음에 JAVA_HOME을 인쇄하고 다양한 다른 흥미로운 장소에서 인쇄하는 것이 좋습니다.
- Eclipse에서 실행 → 외부 도구 → 외부 도구 구성을 클릭 하십시오 .
- JRE 탭을 클릭 하십시오.
- 클릭 설치의 JRE를 ... 버튼을 클릭합니다.
- 추가 버튼을 클릭 합니다.
( 해당되는 경우 표준 VM 선택 ) - 디렉토리 버튼을 클릭 합니다.
- 설치된 Java
(예 :)의 JDK 버전 (JRE 아님)을 찾습니다C:\Program Files\Java\jdk1.7.0_04
. - 마침 및 확인을 클릭 합니다 .
- Separate JRE 에서 JDK를 선택하고 Close를 클릭 합니다 .
- Ant 스크립트를 다시 실행하십시오. 재미있게 보내십시오!
이것은 내가 만난 특정 시나리오에서 작동했습니다.
다음 명령을 사용하여 Ant 빌드를 실행하려고 할 때 동일한 문제가 발생했습니다.
java -cp ant.jar:ant-launcher.jar org.apache.tools.ant.Main
명령의 출력은 다음과 같습니다.
BUILD FAILED
XXX/build.xml:8: 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 "/usr/lib/jvm/java-6-openjdk/jre"
Java 실행 파일은 JDK가 설치된 "/ usr / lib / jvm / java-6-openjdk"와 달리 "/ usr / lib / jvm / java-6-openjdk / jre"를 JAVA_HOME으로 선택하는 것 같습니다.
fork="yes"
내 <javac>
작업 을 설정하여이 문제를 해결했습니다 .
http://ant.apache.org/manual/Tasks/javac.html을 살펴보십시오.
JAVA_HOME 설정에 / bin을 포함하고 Ant가 여기에 / bin을 추가하여 exe를 찾지 못할 수도 있습니다. 나에게 일어난 일입니다 :}
확실히 당신은 할 수 있도록 하지 이하지 않습니다 일 : 후행 세미콜론을 사용합니다 :
set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_29;
이것은 :
set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_29
나는 비슷한 문제를 만났습니다. 나는 Maven 빌드에서 Ant 작업을 실행하도록 링크하고 문제가 발생했습니다. 다음 단계로 수정했습니다.
- JAVA_HOME이 올바르게 설정되어 있는지 확인하십시오. 명령 줄의 Windowns에서 다음과 같이 확인할 수 있습니다. C :> echo % JAVA_HOME % 결과는 다음과 같습니다. C : \ Progra ~ 1 \ Java \ jdk1.6.0_30 \
- tools.jar 파일을 % JAVA_HOME % \ lib에서 Maven의 lib 디렉토리로 복사합니다.
그리고 그것은 나를 위해 일했습니다.
이 문제를 해결하려면 window-> preferences-> ant-> runtime에 tools.jar 파일을 추가하십시오.
Eclipse에서 설치된 JRE 설정을 프로젝트 (프로젝트 속성-> Java 빌드 경로-> 라이브러리)에서 JDK로 설정하거나 환경 설정 (Java-> 설치된 JRE)에서 전역 기본값으로 설정합니다. eclispe 설정은 시스템 변수보다 강합니다.
시스템 및 사용자 환경 변수에 대해 알고 있기를 바랍니다. 사용자는 시스템보다 선호됩니다. 시스템 변수에 JAVA_HOME을 설정하고 사용자 변수에 동일한 항목이 있으면 후자 만 얻을 수 있습니다.
내 컴퓨터를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동하고 고급 탭을 선택한 다음 환경 변수를 클릭하여 사용자 및 시스템 환경 변수 목록을 확인합니다.
세미콜론이 저를 버렸습니다. JAVA_HOME
"C : \ jdk1.6.0_26;"으로 설정했습니다. "C : \ jdk1.6.0_26"대신. ant.bat
파일 을 검사하라는 Jon Skeet의 제안에 따라 후행 세미콜론을 제거했습니다 . 다음은 해당 파일의 일부입니다.
if "%JAVA_HOME%" == "" goto noJavaHome
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
따라서 세미콜론이 끝 부분에서 잘리지 않아 파일을 찾지 못해 "C : \ Java \ jre6"또는 이와 유사한 것으로 기본 설정됩니다.
혼란스러운 부분은 HowtoBuild 페이지에 세미콜론을 사용하도록 명시되어 있지만 이것이 깨지는 것 같습니다.
동일한 문제에 직면하여 javac 태그의 실행 속성을 javac.exe의 위치로 설정하면 문제가 해결되었습니다. 이것은 문제를 해결했습니다.
<javac srcdir="${srcDir}" destdir="${buildDir}" fork="true" executable="C:\Program Files\Java\jdk1.7.0_03\bin\javac"/>
실제로 superuser.com 에서이 답변을 찾았지만 JDK \ lib 디렉토리에서 JRE \ lib 디렉토리로 tools.jar을 복사해야했습니다.
제로 의미가 있습니다 ... 내가 생각할 수있는 유일한 것은 Sun이 최신 Java 런타임 (Java 7 Update 11) 에서이 버그를 도입했거나 현재 JDK 위치를 읽는 방식에서 Ant의 버그입니다 (JRE는 JDK보다 업데이트되었습니다. 분명히 썬의 어리석은 일입니다 ... JRE를 업데이트 할 때마다 JDK를 릴리스해야합니다).
내 JAVA_HOME이 올바르게 설정되었습니다. "set JAVA_HOME"을 통해 확인했습니다. 내 JDK 디렉토리를 가리키고 철자가 정확했습니다. 그러나 Ant는 javac를 찾을 수 없다고 주장했지만 JAVA_HOME이 내 JRE 디렉토리에 있다고 생각했습니다.
내 시스템은 최신 Sun JRE7 업데이트 (10 및 11) 전에 제대로 작동했습니다. Ant는 버전 1.8.4입니다.
당신이있는 경우 JAVA_HOME
설정을하지만, 거기에 오타가있다, 당신은 또한 JRE6 경로에 가짜 참조를 볼 수 있습니다.
다른 모든 것이 정확하면 다음을 시도하십시오.
- 창-> 환경 설정-> Ant-> 런타임-> 클래스 경로로 이동
- 전역 항목을 확장하고 여기에서 사용 가능한 jdk 도구를 확인하십시오.
- "C : \ Program Files \ Java \ jdk1.6.0_45 \ lib \ tools.jar"과 같은 특정 Java 버전에서 필요한 tools.jar을 추가하십시오.
- 이제 결과를 빌드하고 확인하십시오.
참고 : 여러 개의 tools.jar (Java 컴파일러)가있는 경우 사용하려는 Java 컴파일러에 대한 tools.jar을 추가하고 tools.jar 목록에서 위로 이동하여 우선 순위를 지정하십시오.
아래 단계에서 JDK 경로를 설정하십시오.
'실행'-> 외부 도구-> 외부 도구 구성으로 이동하십시오.
-> 'JRE'를 선택한 다음 드롭 다운 목록에서 사용 가능한 JDK를 선택합니다. 전의. jdk1.8.0_25
I had the same problem. My JDK package pointed by JAVA_HOME didn't have any tools.jar Be sure that your JDK instal.lation has tools.jar
(clearly the message error is confusing)
Set JAVA_HOME in the environment variables as D:\Program Files\IBM\SDP\jdk
Do not give any quotes or semicolon. It's works for me.Please try the solution. Actually in ant.bat it checks for appropriate JAVA_HOME
in case if ant.bat not able to find it then it's JAVA_HOME
points the default JRE.
I was also facing the same problem. I am using Windows 7 and I had two versions of java installed. First I have installed latest version java 7 and then version 5.
Contents of my java installation directory:
C:\Program Files\Java>
jdk1.5.0_14
jdk1.7.0_17
jre1.5.0_14
jre7
and my JAVA_HOME was set to the correct value, which was:
C:\>set ja
JAVA_HOME=C:\Program Files\Java\jdk1.5.0_14
But still I was getting the same problem:
XXXXXXX\build.xml:478: The following error occurred while
executing this line:
XXXXXXX\build.xml:477: 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\jre7"
After trying out all the suggestion in this thread I realized my mistake. I was trying to set the environment variable in "User variables" instead of "System Variables" section. After setting it in "System Variables" it worked fine. I am facing another problem though.
The default version of java it points to is still 7.
C:\>java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) Client VM (build 23.7-b01, mixed mode, sharing)
I am not sure how to make it point to version 5.
I faced this problem when building my project with Jenkins. First, it could not find ant.bat
, which was fixed by adding the path to ant.bat to the system environment variable path. Then ant could not find the jdk directory. This was fixed by right-clicking on my computer > properties > advanced > environment variables
and creating a new environment variable called JAVA_HOME
and assigning it a value of C:\Program Files\Java\jdk1.7.0_21
. Don't create this environment variable in User Variables. Create it under System Variables only.
In both cases, I had to restart the system.
It is common to get this issue. I cannot set any specific Java home in my system as I have 2 different version of Java (Java 6 and Java 7) for different environment. To resolve the issue, I included the JDK path in the run configuration when opening the build.xml file. This way, 2 different build files use 2 different Java version for build. I think there might be a better solution to this problem but at least the above approach avoid setting the JAVA_HOME variable.
FYI, I am using Windows 7 and had to restart Windows in order for the new JAVA_HOME setting to take effect.
had the same problem;
c:\jb\src\build.xml:191: 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\jre7"
Total time: 0 seconds
c:\jb\src>echo %JAVA_HOME%
c:\Program Files\Java\jdk1.7.0_13
solution:
path = c:\ant\bin\;%PATH%
path = c:\Program Files\Java\jdk1.7.0_17\bin;%PATH%
set "JAVA_HOME=c:\Program Files\Java\jdk1.7.0_13"
I guess the jdk path instruction alone would do it but I'm to lazy to figure it out above solution is bullet proof. :-)
Also using Windows7
Quick work around for the same is
Copy C:\Program Files\Java\jdk1.6.0_14\lib\tools.jar to C:\Program Files\Java\jre6\lib\
This exception is coming because JAVA_HOME is being set as C:\Program Files\Java\jre6 and Ant is not able to find tools.jar in it.
If need to run ant in eclipse with inbuilt eclipse jdk add the below line in build.xml
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
'development' 카테고리의 다른 글
List와 IEnumerable의 실제 차이점 (0) | 2020.12.06 |
---|---|
C #에서 이름으로 Windows Forms 컨트롤 가져 오기 (0) | 2020.12.06 |
간단한 AngularJS 양식이 범위에서 정의되지 않았습니다. (0) | 2020.12.06 |
GDB에서 구조체가 가지고있는 필드를 어떻게 표시합니까? (0) | 2020.12.06 |
"고급"SQL이란 무엇입니까? (0) | 2020.12.06 |