Estoy tratando de tener mvn exec:exec (o mvn exec:java) ejecutar mi programa con un local de la jarra en el classpath. Sin embargo, el frasco no se carga:

Exception in thread "main" java.lang.Error: Unable to load voice directory. java.lang.ClassNotFoundException: com.sun.speech.freetts.en.us.cmu_us_slt_arctic.ArcticVoiceDirectory
at com.sun.speech.freetts.VoiceManager.getVoiceDirectories(VoiceManager.java:211)
at com.sun.speech.freetts.VoiceManager.getVoices(VoiceManager.java:111)
at com.sun.speech.freetts.VoiceManager.getVoice(VoiceManager.java:521)
at xpress.audio.TTS.<init>(TTS.java:66)
at xpress.audio.TTS.<init>(TTS.java:62)
at xpress.audio.AudioProducer.main(AudioProducer.java:18)

De ejecutar el programa directamente desde la CLI mediante java obras:

    C:\XpressAudio\target\classes>java -cp "C:\XpressAudio\target\XpressAudio-1.0-SN
APSHOT-jar-with-dependencies.jar;C:\XpressAudio\cmu_us_slt_arctic.jar;C:\XpressA
udio\en_us.jar;C:\XpressAudio\*" xpress.audio.AudioProducer

Aquí está el <build> parte de mi pom.xml:

 <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <executable>java</executable>
                    <mainClass>xpress.audio.AudioProducer</mainClass>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>cmu_us</groupId>
                        <artifactId>slt_arctic</artifactId>
                        <version>1.0</version>
                        <scope>system</scope>
                        <systemPath>${basedir}/cmu_us_slt_arctic.jar</systemPath>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

Podría alguien decirme cómo debo editar el pom.xml tal que mvn exec:exec funciona como el java comando de arriba?

com.sun.speech.freetts.en.us.cmu_us_slt_arctic.ArcticVoiceDirectory es una clase en cmu_us_slt_arctic.jar

posibles duplicados de Maven plugin exec – cómo incluir «sistema» classpath?
Usted probablemente tendrá que usar el java mojo en lugar de la exec mojo, y ver las opciones que figuran allí: mojo.codehaus.org/exec-maven-plugin/java-mojo.html. Especialmente executableDependency, includePluginDependencies y includeProjectDependencies supongo.

OriginalEl autor simpatico | 2013-09-28

3 Comentarios

  1. 5

    En maven es posible incluir un local jar (que está fuera de repositorio de maven) utilizando systemPath. Pero dado que el alcance del sistema (para las dependencias declarado con systemPath), hay pocas limitaciones y debido a que solo funciona con exec:java.

    Para exec:exec, la solución anterior no funciona debido a maven no incluye sistema de ámbito de las dependencias en su generados (tiempo de ejecución) classpath (%classpath) por lo que la solución es utilizar tu propia ruta de clases en lugar de maven generado classpath como se muestra a continuación.

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <executable>java</executable>
                    <arguments>
                         <argument>-classpath</argument>
                         <argument>local.jar;target/project-jar-with-dependencies.jar</argument>
                         <argument>xpress.audio.AudioProducer</argument>
                    </arguments>
                </configuration>
            </plugin>

    Reemplazar local.jar con todos los archivos jar que son necesarios para estar presente en algún lugar fijo (aquí raíz del proyecto es asumido, donde pox.xml se encuentra). También tenga en cuenta el uso de ‘project-jar-with-dependencies.jar’, en tu caso debe ser el destino\XpressAudio-1.0-SN
    APSHOT-jar-with-dependencies.jar.

    ¿En qué sección debe este <plugin>...</plugin> bloque de poner en? He intentado añadir a <build><plugins>... para agregar un directorio /etc/hbase/conf a la ruta de clases, pero parece no tener ningún efecto.
    Lo que si desea una dependencia Y una ruta de acceso local en exec:exec, ¿es posible?

    OriginalEl autor subhasish

  2. 2

    estándar de java no nos permite especificar varios -cp argumentos, pero exec-maven-plugin no, por lo

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution><goals><goal>exec</goal></goals></execution>
        </executions>
        <configuration>
          <executable>./java.pl</executable>
          <arguments>
            <argument>-ea</argument>
            <argument>-cp</argument><argument>.</argument>
            <argument>-cp</argument><argument>my.jar</argument>
            <argument>-cp</argument><classpath/>
            <argument>org.example.ConfigByXml</argument>
          </arguments>
        </configuration>
      </plugin>

    nota la llamada a java.pl anteriormente, este es el truco

    #!/usr/bin/env perl
    while (@ARGV) {
        $arg = shift;
        if ($arg eq '-cp' or $arg eq '-classpath') {
            push @cp, shift;
            next;
        }
        push @args, $arg;
    }
    unshift @args, 'java', '-cp', join(':', @cp);
    # print 'args: ', join(' --- ', @args); # uncomment to debug
    exec @args;

    entender lo que java.pl ¿ y uso, o el equivalente en bash, cmd, powershell, lo que sea..

    OriginalEl autor alexgirao

  3. 1

    Establecer otras clases en maven debe utilizar en su maven archivo de configuración de la siguiente manera:

    <additionalClasspathElements>
        <additionalClasspathElement>path/to/additional/jar</additionalClasspathElement>
    </additionalClasspathElements>

    Para más detalle:
    http://maven.apache.org/surefire/maven-surefire-plugin/examples/configuring-classpath.html

    Infalible es el plugin utiliza para ejecutar las pruebas unitarias. La pregunta está relacionada con la adición de los frascos en tiempo de ejecución usando el plugin exec para modificar su POM como la que usted describe no será de ayuda/trabajo. Desde el enlace de «El infalible plugin crea el prueba classpath en el siguiente orden»
    Mientras que esta respuesta enlaces a maven-segura-plugin, que muestra un buen ejemplo de cómo ampliar el classpath. exec-maven-plugin soporta pero no proporcionan un ejemplo, vea mojohaus.org/exec-maven-plugin/…

    OriginalEl autor Pramod Kumar

Dejar respuesta

Please enter your comment!
Please enter your name here