Nous aimerions expédier des scripts d'assistance (scripts Shell) dans le cadre d'une guerre d'application. Malheureusement, il apparaît comme notre système de construction (Maven) éliminer les autorisations sur tous les fichiers et les scripts se retrouvent sans le bit exécutable. p>
Est-ce même possible de le faire? Le format de .war prend-il en charge des fichiers exécutables? Si oui: comment pourrait dire à Maven de garder les autorisations / les fixer quelque part dans le processus? P>
4 Réponses :
fournir les exécutables en dehors de la guerre. Appelez-les de la guerre. P>
C'est une solution mais cela apporte d'autres problèmes (la maintenance est la première à venir à mon esprit). Je ne suis pas sûr que ce soit une meilleure pratique.
Solution alternative: alimente l'exécutable à l'intérieur de la guerre et à chaque exécution, extrait de manière programmable l'exécutable dans le même répertoire et l'appelez là-bas.
J'ai essayé cette solution mais je ne pouvais pas le faire fonctionner. Pour une raison quelconque, le chargeur de classe n'a pas pu trouver ma ressource de script. Je vais passer une heure d'une heure environ, et si elle échoue, ce sera une occasion pour une nouvelle question :)
@ DirtyHenry Je pense que vous devriez poster cela comme une question distincte, car cette fonctionnalité de base ne fonctionne pas pour vous. Il est difficile de résoudre cette question jusqu'à ce que vous sachiez cette réponse.
Fait: Stackoverflow.com/questions/7974837/... :)
Le problème est plus probable que ces bits ne sont pas pris en charge dans le format zippé sous-jacent. P>
Le bit d'exécution n'a pas besoin d'être défini, si vous exécutez explicitement / bin / sh avec le nom du script. P>
Notez également que votre programme - qui connaît l'emplacement du script - peut appeler "script chmod + x" avant le lancement. P>
Je l'avais réalisé et je l'ai fait dans un autre projet, mais je suis toujours venu ici à la recherche de la solution, juste pour me souvenir de ce que j'ai fait plus tôt. :)
afaik, il n'est pas moyen de définir des autorisations de fichier dans une guerre / un pot (il est toutefois possible lorsque vous utilisez le plug-in Maven Assembly pour créer une archive de distribution binaire em> de votre projet, mais c'est une autre histoire). P>
Alors, je voudrais soit: p>
java.io.tmpdir code>, définissez le bit d'exécution, puis exécutez-les de là ~ ou ~ li>
- Utilisez la solution @ Thorbjørn (n'a pas essayé ça, mais je suppose que cela fonctionnerait); Je me demande simplement d'où vous exécutez ces scripts. LI>
ul>
Lecture entre les lignes, la guerre est explosée, d'où les scripts sont des fichiers réels qui peuvent être invoqués. Sinon, les scripts peuvent être fournis sur STDIN sous Unix.
Vous pouvez également vérifier et définir le drapeau exécutable directement à partir de votre code Java. Voir http: / /docs.oracle.com/javase/6/docs/api/java/io/file.html#setexecutable%28boolant ,%20boolant%29 P>
Puis-je simplement demander comment ces scripts d'assistance vont être utilisés (et par qui)?
Par la demande elle-même :), je sais, ce n'est pas la méthode "JE22", mais nous devons transférer des fichiers de résultat à différents hôtes utilisant SCP et FTP. Faire cela avec un script de shell simple (qui obtient le fichier de résultat sous forme d'argument) est un avertisseur. Nous ne voulons pas faire cela avec Plain-Java.