2013-09-06 12 views
6

Próbuję zbudować JAR z elementem Class-Path w MANIFEST.MF. Dostaję elementy ścieżki klasowej z zewnętrznego źródła (Maven w moim przypadku). Ponieważ ścieżki są absolutne i poza moją kontrolą, mogą zawierać dziwne postacie, takie jak spacje.Jak obsługiwać pliki ze spacjami w ścieżce klas w MANIFEST.MF?

Ponieważ przestrzenie wykorzystywane są do oddzielnych elementów w ścieżce klasy, ta ścieżka nie działa:

Class-Path: C:\User\Some Odd Name\project\target\project-1.0.0.jar 

Jak mogę uciec/kodowanie znaków/dziwne odstępy w pozycji ścieżce klasy w słoiku Manifest?

Odpowiedz

8

elementy w elemencie Class-Path są adresy URL, więc zwykłe reguły uchodzące zastosowanie (i należy użyć ukośniki, jak również):

Class-Path: /C:/User/Some%20Odd%20Name/project/target/project-1.0.0.jar 

Uwaga: początkowy ukośnik jest konieczne, ponieważ C nie jest ważna sieć protokół (jak http lub ftp). Jeśli były pedantyczny, powinien on być file:///C:/...

+0

nie wiedzą, że są adresy URL. Jest to bardzo pomocne, ponieważ muszę podzielić listę adresów URL. Zastanawiałem się, co zrobić z spacjami w ścieżkach/nazwach plików JAR ... teraz wiem, że mogę zignorować. Będą one reprezentowane za pomocą encji URL, np. (Spacja) -> '% 20' – kevinarpe

+0

Dobrze, jednak odkryłem, że dla tego rodzaju absolutnej ścieżki, również musiałem dołączyć"/"przed literą dysku: ' Ścieżka klasy:/C:/Użytkownik/Część% 20Odd% 20Nazwa/projekt/cel/projekt-1.0.0.jar' –

+0

@RDAlkire Prawidłowe, ponieważ 'C' nie jest prawidłowym protokołem sieciowym, np.' Http' lub 'ftp'. Aby być bardzo poprawnym, powinno to być 'file:/C:/...' ale można argumentować, że kontekst (plik manifestu) jest plikiem, więc bazowy adres URL to zawsze 'file: // ... Naprawiony. –

-1

dla mnie daszek charakter był to jedyny sposób, aby skutecznie uciec withespace w systemu Windows ścieżce klas:

Class-Path: C:\User\Some^ Odd^ Name\project\target\project-1.0.0.jar 
+0

To nie powinno działać. Java nie wywołuje CMD.EXE, aby przeanalizować plik MANIFEST.MF ... –