Puncte:1

De ce ar putea codul Java să ruleze bine manual, dar nu dintr-un script Shell?

drapel no

Salut, am o problemă frustrantă: pe mașina mea Ubuntu 22.04, am un cod Java/Maven pe care îl pot rula manual din linia de comandă:

eu@UbuntuV2:~/home/me/path/to/Java/Code$
eu@UbuntuV2:~/home/me/path/to/Java/Code$ mvn test
[INFO] Se scanează pentru proiecte...
[INFO]
[INFO] -------------------< MyCode.java >---------------------
...codul merge bine...

Acest lucru este grozav, dar trebuie să rulez același cod dintr-un script shell:

#!/bin/bash

echo "Rulează scriptul!"
cd /home/me/path/to/Java/Code
testul mvn
echo „Scriptul terminat”.

Ceea ce este ciudat este că scriptul poate lansa codul Java, dar codul rulat de script aruncă o excepție:

eu@UbuntuV2:~/home/me$
eu@UbuntuV2:~/home/me$ ./runScript.sh
Rularea scriptului!
[INFO] Se scanează pentru proiecte...
[INFO]
[INFO] -------------------< MyCode.java >---------------------
2022-03-02 12:29:44,899 principal EROARE Nu se poate accesa fișierul:/home/me/path/to/Java/Code/src/test/resources/log4j2.xml java.io.FileNotFoundException: /home/me/ path/to/Java/Code/src/test/resources/log4j2.xml (Nu există un astfel de fișier sau director)
    la java.base/java.io.FileInputStream.open0(Metoda nativă)
    la java.base/java.io.FileInputStream.open(FileInputStream.java:219)
    la java.base/java.io.FileInputStream.(FileInputStream.java:157)
    ...etc...

E super ciudat, nu? Când este rulat prin scriptul shell, codul Java dintr-o dată nu poate accesa un fișier „log4j2.xml”. ("Nu există un astfel de fișier sau director"). Dar fișierul este acolo, la locul său, iar codul nu are probleme de deschidere când rulez codul manual.

Deci, ce este diferit când rulez codul manual? Mi-am zguduit creierele încercând să mă gândesc la ce ar putea fi diferit. Am făcut toate următoarele:

  • A verificat acel utilizator pe mine rulează manual codul dintr-un shell bash, la fel cum face scriptul.
  • Rulați scriptul ca utilizator pe mine, același utilizator care poate rula codul manual
  • Verificat că scriptul rulează ca pe mine prin adăugarea unui cine sunt comanda din script pentru a verifica
  • Folosit a pwd comandă pentru a verifica dacă scriptul rulează codul din directorul corect.
  • Setați variabila PATH a scriptului să fie exact aceeași cale ca și utilizatorul pe mine folosind comanda export PATH=$PATH:/usr/local/sbin:... în scenariu
  • Am folosit comanda visudo pentru a asigura acel utilizator pe mine are acces nelimitat la toate fișierele de pe Ubuntu
  • S-a asigurat că utilizatorul pe mine deține scriptul și are drepturi de execuție
  • A țipat și a înjurat mult la Ubuntu

Ce altceva ar putea fi problema? Nu am scris codul Java, așa că poate că codul în sine se referă la asta log4j2.xml fișier după căi relative, nu căi absolute...? Dar dacă acesta este cazul, de ce funcționează codul atunci când rulează manual?

Știu că aceasta este o întrebare deschisă, dar ce altceva ar putea fi diferit între versiunile script-ului și versiunile inițiate de om ale rulării acestui cod. Trebuie să-mi lipsească ceva...

guiverc avatar
drapel cn
Ubuntu 22.04 nu există încă; În prezent, este versiunea de *dezvoltare* Ubuntu *jammy* și rămâne asta până când ajunge la starea RC, care nu este așteptată decât după 14 aprilie 2022 și nu este la subiect aici până la lansarea pe 21 aprilie 2022. https://discourse .ubuntu.com/t/jammy-jellyfish-release-schedule/23906 Vă rugăm să consultați https://askubuntu.com/help/on-topic. Pentru probleme de asistență cu Ubuntu *jammy*, va trebui să utilizați un site #ubuntu-next sau #ubuntu+1 (IRC, UF etc.)
guiverc avatar
drapel cn
Dacă doriți să raportați erori, în primul rând vă mulțumesc că ați ajutat la testarea versiunii, dar vă rugăm să consultați https://help.ubuntu.com/community/ReportingBugs și să utilizați un site #ubuntu+1, cum ar fi IRC, https://ubuntuforums. org/ etc. *Acest site nu este urmărit pentru probleme ubuntu+1 sau #ubuntu-next* Nu uitați că *jammy* este încă în *alpha*
Pete avatar
drapel no
@guiverc Mulțumesc Guiverc! Crezi că asta ar putea fi o eroare? > înghiţitură
guiverc avatar
drapel cn
Nu știu; Ți-am scanat textul doar odată ce am văzut că este în afara subiectului; cu toate acestea, problemele cu Ubuntu-next (Ubuntu+1) sunt făcute pe anumite site-uri, care permit testarea problemelor care urmează să fie confirmate, bug-urile depuse astfel încât să poată fi remediate - acesta nu este un site Ubuntu+1/Ubuntu-Next; acest site acceptă numai produse *standard*, de exemplu. lansat și nu ESM/EOL, nici *dezvoltare*.
drapel hr
*o* posibilitate este ca `mvn` să fie alias cu ceva din shell-ul tău interactiv (alias-urile nu sunt extinse în interiorul scripturilor, în mod implicit)
fuzzy drawings avatar
drapel tj
Verificați rezultatul `find "$HOME" -type f -name 'log4j2.xml'` pentru a vedea dacă căile dvs. sunt corecte.
Puncte:2
drapel tj

Cred că ar putea fi o problemă cu drumul pe care îl ești CDîn scenariu.

Privind promptul de comandă când testul mvn a lucrat:

eu@UbuntuV2:~/home/me/path/to/Java/Code$ mvn test

Conducătorul ~ indica $HOME precede calea afișată, ceea ce ar însemna că calea completă este de fapt /home/me/home/me/path/to/Java/Code. Aceasta nu este aceeași locație cu /home/me/path/to/Java/Code în scenariul tău.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.