2009-08-01 15 views
21

Jestem w trakcie pakowania mojej aplikacji java do pliku JAR. Używam mrówki i zaćmienia. Muszę faktycznie dołączyć do słoika kilka oddzielnych, niekodowanych plików (pliki xml i txt) bezpośrednio pod folderem głównym, a nie w tym samym miejscu co kod.Dodawanie zasobów niekodujących do pliku jar za pomocą Ant

Próbuję użyć includesfile, ale to nie wydają się działać, tu jest mój cel mrówka:

<target name="distribute" depends="compile" includesfile="readthis.txt"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
     <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/>   
    </jar> 
</target> 

Powyższy działa poprawnie, gdy pominąć argumentu includesfile. Dodatkowo muszę dodać wiele plików bez kodu. Pliki te znajdują się bezpośrednio pod głównym folderem projektu w Eclipse, a nie w żadnych pakietach java.

Ponadto, jak widać powyżej, zasadniczo włączyłem do słoika również mój kod źródłowy. Czy istnieje sposób, aby powiedzieć zadanie jar, aby umieścić kod źródłowy w oddzielnym folderze ze skompilowanego kodu?

Jako narzędzie do kompilacji lub kompilacji Ant może z łatwością oddzielić kod źródłowy od skompilowanych klas. Ale czy istnieje sposób, aby to zrobić w pliku jar?

Wielkie dzięki za poświęcony czas!

Odpowiedz

34

Nie powinien mieć atrybut includesfile w cel na początek, i podejrzewam, że masz źle punkt to tak - chodzi o to, że plik można określić z includesfile zawiera wzory, dla których pliki do włącz, jeśli nie chcesz umieszczać ich w pliku Ant.

Uderza mnie, że wszystko, czego potrzebujesz, to dodatkowy zestaw plików zawierający odpowiednie pliki. Na przykład, dla readthis.txt:

<target name="distribute" depends="compile"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
    <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/> 
    <fileset file="readthis.txt" /> 
    </jar> 
</target> 

Chciałbym również zasugerować, że utworzeniu nowego katalogu dla zasobów, dzięki czemu można zrobić:

<target name="distribute" depends="compile"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
    <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/> 
    <fileset dir="${resourcesDir}" /> 
    </jar> 
</target> 

bez kłopotów. Utrzyma to również czystość struktury katalogów, ułatwiając znajdowanie elementów od góry do dołu.

+0

Dzięki! To z pewnością pomogło. Zastanawiam się, czy mogę również powiedzieć słoikowi zadanie oddzielenia źródła od skompilowanych klas? W tej chwili zarówno źródło, jak i klasy znajdują się w tej samej strukturze pakietu, czy nie powinno być zadaniem jar zachowania folderów wyjściowych i src? Oznacza to, że gdy rozwijam słoik, widzę w myjar/code/my/package/file.java i file.class Myślałem, że zadanie jar może zachować foldery takie jak: myjar/code/my/package /source/file.java - i osobno myjar/code/my/package/build/file.class Czy brakuje mi czegoś w moim korzystaniu z zadania jar? – denchr

+0

Nie, jesteś niepoprawny. Powinny one być obok siebie. Jeśli słoik zawiera strukturę folderów, taką jak code/my/package/build/file.class, oznacza to, że nazwa pakietu powinna mieć postać code.my.package.build. Możesz również po prostu umieścić źródła w drugim pliku JAR. –

+0

Widzę, o co ci chodzi. Wszystko, co sugeruję, wpłynęłoby na nazewnictwo paczki ... Zatem, ogólnie rzecz biorąc, jeśli chcę uwzględnić źródło w moim pliku jar, to * ma * być w tym samym folderze, co skompilowana kompilacja. – denchr

Powiązane problemy