Domanda

Sto lavorando su un semplice script di build che dovrebbe ottenere alcune costanti da un file di classe Java e utilizzarli come i numeri di versione nei miei nomi dei file. Io uso Eclipse e proprio Formica, ma messo BCEL-5.2.jar nelle mie librerie cartella e nel classpath per la chiamata 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>

Ma purtroppo il compito formica LoadProperties non

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

Dopo di che ho cercato di correre Ant dall'esterno Eclipse, utilizzando questa riga di comando:

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

Il risultato è

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

Sono veramente perso ora. Si tratta di un errore di BCEL? E 'un'incompatibilità formica con la mia BCEL?

Un ultimo suggerimento: Rimuovere la voce BCEL classpath dai risultati target Ant in questo:

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)

Aggiorna Dopo aver impostato le preferenze di Ant in Eclipse, il messaggio di errore è cambiato:

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)

Ora penso che sia forse un conflitto di versione tra Ant e BCEL. O BCEL e JDK1.6. O Eclipse e BCEL e Ant o JDK ... mi sono perso.


RISPOSTA:

Questo è il commento che trovate di seguito

  

avrei parlato di questo - non c'è bisogno di convertire nulla. Doc: "dal Ant   1.7, la codifica dei caratteri ISO-8859-1 viene utilizzato per convertire da personaggi torna a   byte, quindi si deve usare questa codifica per la lettura del file di classe Java." Questo è solo un   convenzione per aggirare il fatto che un filtro carattere viene utilizzata su byte grezzi.   ant.apache.org/manual/CoreTypes/... Usare UTF-8 sarebbe male! - McDowell

È stato utile?

Soluzione

Crap, lo sapevo! Scende a presentare problemi di codifica. I file sono ancora in ISO-8819-1, ma sto usando UTF-8. Il progetto è piuttosto invecchiato ed è stato creato con la codifica sbagliata sul posto. L'impostazione del parametro encoding nella javac e LoadProperties Task lo fissa.

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

Ho pensato che ha cambiato dal nostro server Subversion, ma credo di avere per convertire ogni singolo file in UTF-8 me stessa ... pensare che è un altro problema per il SO.

Altri suggerimenti

Il per LoadProperties dice che la nidificato classpath elemento è per l'utilizzo con il risorse di attributo -. in alternativa all'utilizzo SRCFILE

Aggiungi il vaso BCEL al vostro percorso di classe globale. In Eclipse, aggiungerlo come una voce globale per classpath nel preferenze runtime . Nella riga di comando, utilizzare l'interruttore -LIB .

alt text
(fonte: eclissi. org )

appare come un errore di percorso di classe. Run "-v formica" per darvi qualche dettaglio sugli errori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top