문제

저는 Java 클래스 파일에서 일부 상수를 가져와 파일 이름의 버전 번호로 사용해야 하는 간단한 빌드 스크립트를 작성 중입니다.나는 Eclipse와 자체 Ant를 사용하지만 bcel-5.2.jar 내 libs 폴더와 Ant 호출을 위한 클래스 경로에 있습니다.

<target name="generate_version" depends="compile">
    <loadproperties srcfile="${dir.dest}/MyVersion.class">
        <classpath>
            <fileset dir="${dir.libs}">
                <include name="**/bcel*.jar"/>
            </fileset>
        </classpath>

        <filterchain>
            <classconstants/>
        </filterchain>
    </loadproperties>
</target>

하지만 불행히도 개미 작업은 로드 속성 실패:

build.xml:46: expected a java resource as source

그 후 다음 명령줄을 사용하여 Eclipse 외부에서 Ant를 실행하려고 했습니다.

set ANT_HOME=C:\Program Files\Java\ant\apache-ant-1.7.1
"%ANT_HOME%\bin\ant.bat"

결과는

Buildfile: build.xml

init:
     [echo] Building project.
     [echo] ant.home:          C:\Program Files\Java\ant\apache-ant-1.7.1
     [echo] ant.java.version:  1.6
     [echo] ant.version:       Apache Ant version 1.7.1 compiled on June 27 2008

compile:
    [javac] Compiling 262 source files to **********\build
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: Some input files use unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.

generate_version:

BUILD FAILED
********************\ant\build.xml:46: expected a java resource as source

나는 지금 정말로 길을 잃었습니다.bcel 오류인가요?내 bcel과 Ant가 호환되지 않습니까?

마지막 힌트:Ant 대상에서 bcel 클래스 경로 항목을 제거하면 다음과 같은 결과가 발생합니다.

Buildfile: build.xml

init:
     [echo] Building project.
     [echo] ant.home:          C:\Program Files\Java\ant\apache-ant-1.7.1
     [echo] ant.java.version:  1.6
     [echo] ant.version:       Apache Ant version 1.7.1 compiled on June 27 2008

compile:
    [javac] Compiling 262 source files to ********************\build
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: Some input files use unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.

generate_version:

BUILD FAILED
java.lang.NoClassDefFoundError: org/apache/bcel/classfile/ClassParser
        at org.apache.tools.ant.filters.util.JavaClassHelper.getConstants(JavaClassHelper.java:47)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

업데이트 Eclipse에서 Ant 환경 설정을 지정한 후 오류 메시지가 변경되었습니다.

BUILD FAILED
*********************\build.xml:46: org.apache.bcel.classfile.ClassFormatException:  is not a Java .class file
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:115)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:357)
    at org.apache.tools.ant.Target.performTasks(Target.java:385)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
    at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
    at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)

이제 Ant와 BCEL 사이의 버전 충돌이 아닐까 생각합니다.또는 BCEL 및 JDK1.6.아니면 Eclipse, BCEL, Ant 또는 JDK...나는 길을 잃었다.


답변:

아래 댓글이 바로 이겁니다

나는 이것을 언급했어야 했습니다. 아무것도 변환할 필요가 없습니다.문서:"Ant 1.7 이후 ISO-8859-1 인코딩 문자는 문자에서 바이트로 다시 변환하는 데 사용되므로 Java 클래스 파일을 읽는 데이 인코딩을 사용해야합니다." 이것은 문자 필터가 원시 바이트에 사용되고 있다는 사실을 해결하기위한 협약 일뿐입니다.ant.apache.org/manual/CoreTypes/… UTF-8을 사용하는 것은 좋지 않습니다!– 맥도웰

도움이 되었습니까?

해결책

젠장, 그럴 줄 알았어!파일 인코딩 문제로 귀결됩니다.파일은 여전히 ​​ISO-8819-1에 있지만 UTF-8을 사용하고 있습니다.프로젝트가 꽤 오래되었고 잘못된 인코딩으로 생성되었습니다.매개변수 설정 부호화 에서 javac 그리고 로드 속성 작업으로 해결됩니다.

<target name="generate_version" depends="compile">
    <loadproperties encoding="iso-8859-1" srcfile="${dir.dest}/MyVersion.class">
        <filterchain>
            <classconstants/>
        </filterchain>
    </loadproperties>
</target>

Subversion 서버에서 변경된 줄 알았는데 이제 모든 파일을 직접 UTF-8로 변환해야 할 것 같습니다...그것이 SO에 대한 또 다른 질문이라고 생각하십시오.

다른 팁

그만큼 문서화 로드 프로퍼티 중첩된다고 말합니다 클래스 경로 요소는 다음과 함께 사용합니다 자원 속성 - 사용의 대안 srcfile.

Bcel Jar를 글로벌 클래스 경로에 추가하십시오. Eclipse에서는 ClassPath에 대한 글로벌 항목으로 추가하십시오. 런타임 환경 설정. 명령 줄에서 사용하십시오 -lib 스위치.

alt text
(원천: eclipse.org)

ClassPath 오류처럼 보입니다. "Ant -V"를 실행하여 오류에 대한 자세한 정보를 제공하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top