2011-11-26 12 views
5

Jestem trochę nowy w Javie i bardzo nowy w maven. Mogę niedokładnie posługiwać się terminologią.Kompilowanie projektu maven z klasy z zewnętrznego pliku jar (który nie jest w artefakcie maven)

W miarę rozwijania mojego projektu, którego używam, używam programu maven do tworzenia, ponieważ potrzebowałem klas, które nie są częścią podstawowego języka Java, dodałem odpowiednią sekcję <dependency> do mojego pom.xml (zwykle skopiowanego z mvnbrowser.com bez mojego bardzo dobrego zrozumienia) i mogłem korzystać z zajęć, które chcę. Działa świetnie.

Teraz natknąłem się na klasę języka Java, której chcę użyć, która najwyraźniej nie jest dostępna w artefakcie maven. Jest to com.android.sdklib.build.ApkBuilder, który jest dystrybuowany z Androidem SDK. Napisałem samodzielny program java, aby mój kod działał; Kompiluję go z javac, a nie z mavenem, i to działa dobrze. W tym celu umieściłem plik jar zawierający żądaną klasę, sdklib.jar, w moim katalogu jre/lib/ext (/usr/local/jdk1.6.0/jre/lib/ext na komputerze FreeBSD), a moja linia import com.android.sdklib.build.ApkBuilder kompiluje się dobrze i mogę odnieść się do ApkBuilder i używać go bez żadnych problemów.

Teraz, kiedy kopiowane mój kod pracy w moim projekcie maven, i starał się budować z mvn project, mam package com.android.sdklib.build does not exist błędy na linii importować, a cannot find symbol: class ApkBuilder błędy gdzie odsyłam do ApkBuilder.

Przeglądając sieć, znalazłem android-maven-plugin tutaj: http://code.google.com/p/maven-android-plugin/. Odesłał mnie do maven-android-sdk-deployer tutaj: https://github.com/mosabua/maven-android-sdk-deployer. Na początku te prelekcje brzmiały obiecująco, ale o ile wiem, ich celem jest tworzenie aplikacji na Androida za pomocą maven, co nie jest tym, co próbuję zrobić. Po prostu chcę, aby mój program java manipulował plikami Android apk, ale mój program java nie jest uruchamiany na urządzeniu z Androidem. Ponadto Android SDK jest przystosowany do pracy z linuxem, a nie z FreeBSD, którego używam, więc nie mogę wykonać instrukcji instalacji dla maven-android-sdk-deployer. Znalazłem też artefakt o nazwie maven-apkbuilder-plugin, ale wydaje się, że jest to również przeznaczone do tworzenia aplikacji na Androida i nie widziałem dla niego dokumentacji. Więc nie dążyłem do tych tropów.

Wydaje się, że najłatwiej byłoby po prostu, żeby kompilator, aby spojrzeć w moim folderze jre/lib/ext dla pliku sdklib.jar gdy uruchomiony mvn package. Ale może to nie jest droga. A może jest prosta zmiana, którą mogę wprowadzić do mojego pom.xml, która spowoduje, że kompilator znajdzie sdklib.jar. Spojrzałem na dokumentację pom na http://maven.apache.org/pom.html#Build_Settings, ale nie widziałem sposobu, aby to zrobić. W każdym razie, jestem pewien, że istnieje przynajmniej jedno rozwiązanie; Po prostu tego nie wiem (jeszcze).

Jakie są moje opcje? Jaki jest najlepszy sposób korzystania z klasy ApkBuilder w moim stworzonym przez maven projekcie? Co powinienem przeczytać, co pozwoliłoby mi odpowiedzieć na to pytanie osobiście? Dzięki!!

+0

Masz poprawnie zidentyfikować źródło problemu - JAR brakuje w ścieżce klas. Zasilanie "jre/lib/ext" nie jest idealne. Spróbuj poznać niektóre narzędzia programistyczne Maven + Android (nie wiem nic na temat Androida). M2e-Android (http://rgladwell.github.com/m2e-android/) wydaje się intrygujący. Twierdzi, że "przenosi moc zarządzania zależnością Mavena do ADT" –

Odpowiedz

8

Jeśli próbujesz odwołać się do słoika, najprostszym rozwiązaniem może być ręczne dodanie słoika do lokalnego repozytorium. Aby uzyskać szczegółowe informacje, patrz here.

pigułce:

mvn install:install-file  \ 
    -Dfile=<path-to-file>  \ 
    -DgroupId=<group-id>  \ 
    -DartifactId=<artifact-id> \ 
    -Dversion=<version>  \ 
    -Dpackaging=jar 

Ty może stosowanie co chcesz dla group-id, artifact-id i version, ale powinny one być coś przypominającego to, czego można się spodziewać, jeśli jest on dostępny w repo.

Ponieważ w rzeczywistości nie tworzysz projektu Android, może to być wystarczające.


Oto jak zadałbym to pytanie.

Jak mogę użyć biblioteki niedostępnej z repozytorium Maven w mojej kompilacji Mavena?

(Przypadkowo, to i krótsze odmiany, które powinny wywołać linki ty „powinno” przeczytali, aby odpowiedzieć na ostatnie pytanie :)

Powiązane problemy