2017-06-06 3 views
1

Dans mon projet, je dois utiliser libav pour convertir des vidéos et des audios. J'ai donc besoin d'inclure des outils libav dans mon projet. Ceci est ma structure du projet:Grails WAR ne trouve pas de fichier dans la classe java

grails-project 
| 
|-- .classpath 
|-- .groovy 
|-- .project 
|-- .settings 
|-- application.properties 
|-- grails-app 
|-- lib 
| |-- avconv -->>> `This is the folder which contains libav tools` 
|-- scripts 
|-- src 
| |-- groovy 
| |-- java 
| | |-- Converter.class -->>> `This is my converter class` 
|-- target 
|-- test 
|-- web-app 

i utiliser également l'interface java pour libav qui est avconv4java. Il exécute un processus d'exécuter des commandes de Libav et je pavent la voie libav comme ceci:

dans l'interface Java, il passe le chemin comme argument de ProcessBuilder et il démarre, il etc.

En environnement de développement, il fonctionne très bien. Cependant, quand je déploie la guerre et essayer de convertir une vidéo que je suis l'erreur suivante:

java.io.IOException: Cannot run program "lib/avconv/bin/avconv.exe": CreateProcess error=2, The system cannot find the file specified 

Je regardai ma structure déployée et a trouvé que avconv dossier est pas dans le dossier lib. J'ai donc ajouté ces lignes à buildconfig:

grails.war.resources = { stagingDir, args -> 
    copy(todir: "${stagingDir}/WEB-INF/lib/avconv") { 
     fileset(dir: "lib/avconv", includes:"**") 
    } 
} 

Maintenant avconv est dans le dossier lib -comme le développement Environnement- Cependant, je reçois toujours la même erreur. Que dois-je faire pour le faire fonctionner?

Toute aide est appréciée. Merci d'avance.

GRAILS VERSION: 2.4.5 développement dans IntelliJ Déployé à Tomcat 7

Répondre

0

Les chemins relatifs seront appelés à partir de la racine du dossier tomcat. En supposant que le fichier en question est sur votre chemin de classe, vous pouvez appeler getResource pour y accéder et passer le chemin absolu à AVCommand.

+0

Merci d'avoir répondu. Je l'ai résolu en donnant des chemins absolus, donc je vais accepter cela comme réponse pour les prochaines venues :) Je souhaite que vous avez répondu plus tôt :))) – ayZagen