2013-08-18 30 views
5

Próbuję utworzyć bibliotekę, która może być używana w innych projektach. Napisałem jedną klasę z kilkoma statycznymi metodami, żeby zrobić kilka rzeczy. Chciałem go wypróbować, ale nie mogę użyć zaimportowanego pliku JAR.Tworzenie pliku biblioteki Java z IntelliJ IDEA

Skompilowałem swój kod jako artefakt i wziąłem plik JAR z folderu "out", a następnie skopiowałem go do innego projektu. Następnie przeszedłem do "struktury projektu", zakładki "Biblioteki" i wcisnąłem przycisk plus. Znalazłem plik JAR i wybrałem go, potem IDEA poprosiła mnie o określenie zależności, tak zrobiłem, ale kiedy chcę go użyć w kodzie, nie jestem w stanie tego zrobić. Nie można go nawet zaimportować.

Class from library not recognized

Jakieś pomysły dlaczego ignoruje moją bibliotekę? Dzięki!

Co należy zrobić, aby utworzyć bibliotekę JAR z IntelliJ IDEA, którą można wykorzystać w innych projektach?

+0

Twój opis jest nieco zbyt ogólnikowy. Czy mogę zaproponować pobranie biblioteki innej firmy (v.g., coś z Apache Commons) i spróbować użyć tego w swoim projekcie? Wystarczy zawęzić problem do utworzenia słoika lub jego użycia w innym projekcie. – SJuan76

+0

Jestem gotów użyć JSch do połączenia SSH w ten sam sposób i działa bezbłędnie. Jednak moja biblioteka jest ignorowana. Nie mogę używać metod w głównej klasie i nie mogę tworzyć żadnych wystąpień klasy, która jest w mojej bibliotece .. – Dropout

+1

Dziwne ... Nie ma nic szczególnego w tworzeniu biblioteki JAR w IDEA i importowaniu jej do projektu z wyjątkiem tego, że napisałeś (przynajmniej w ogólnym przypadku). Właśnie próbowałem odtworzyć kroki opisane w twoim opisie i nie miałem żadnych problemów. Spróbuj sprawdzić, czy nie zaznaczyłeś przypadkowo swojej biblioteki w całości lub w częściach jako wykluczony katalog. –

Odpowiedz

2

Wyjaśniałem, jaki jest mój problem. Kiedy tworzyłem bibliotekę, starałem się to uprościć. Zbyt proste, niestety. Miałem pakiet z klasą, która została skompilowana w JAR. Struktura pokazana poniżej:

foo 
| 
|_ MyLib.java 

Jednak aby korzystać z klas z utworzonej biblioteki JAR, muszą one być umieszczone w paczkach. Oznacza to, że jeśli mam:

foo 
| 
|_bar 
| | 
| |_MyInnerLib.java 
| 
|_MyOuterLib.java 

jestem w stanie importować i używać metod z MyInnerLib ale MyOuterLib nie jest osiągalny ani importable. To był błąd, który popełniłem.

+1

Czy "foo" to nazwa twojego pliku JAR (to jest * foo.jar *)? Przyczyną tego problemu może być (cytat z ["** Specyfikacja języka Java **" sekcja 7.5] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-7. html # jls-7.5), emphasis mine): "* Typ w nienazwanej paczce (§7.4.2) nie ma nazwy kanonicznej, więc wymóg kanonicznej nazwy w każdym rodzaju zgłoszenia importowego implikuje, że (a) ** typy w nienazwanym pakiecie nie mogą być zaimportowane ** i (b) statyczne elementy typów w nienazwanym pakiecie nie mogą być zaimportowane. * ". – informatik01

5

Występuje bardzo powszechny problem z zarządzaniem zależnościami.

IMO prawdziwą odpowiedzią jest użycie systemu kompilacji, takiego jak Maven, Ant lub Gradle (sam chodziłem na Gradle). To, co próbujesz zrobić, jest ręczne, trudne do odtworzenia i kruche.

Za każdym razem, gdy wprowadzasz zmianę, będziesz musiał przejść przez ręczne czynności, aby utworzyć nowy plik JAR. I naprawdę nie rozumiesz swoich zależności.

Aby uzyskać dostęp do najlepszych praktyk, trzeba mieć prawdziwy system kompilacji, który publikuje na serwerze ciągłej integracji, który kompiluje i uruchamia testy. Po pomyślnym zakończeniu testów, JAR są publikowane na serwerze artefaktów (Nexus/Artifactory).

Osoby, którym je udostępniasz, będą pobierać pliki JAR za pośrednictwem systemu kompilacji, deklarując zależności w Twoim pliku JAR.

+0

Dzięki za info @phil, jest to bardzo przydatna porada, jednak nie rozważam żadnych aktualizacji JAR, które próbuję stworzyć w tej chwili. Problem polega na tym, że nie mogę uzyskać dostępu do klas wewnątrz pliku JAR po zaimportowaniu do projektu. – Dropout

Powiązane problemy