3 kwietnia 2007

Integracja DdlUtils i Eclipse przy pomocy Ant'a

To ciekawe, na co można się natknąć eksplorując projekty Apache. Tym razem mowa o DdlUtils, http://db.apache.org/ddlutils/, następcy commons-sql, rzeczy tyleż prostej, co wspaniałej. Jestem zachwycony. Trochę tylko szkoda, że projekt nie doczekał się jeszcze porządnej dokumentacji ani nawet wydania (ang. release) w formie binarnej, gotowej do użycia. Ale gra jest warta świeczki, pobieramy źródła z repozytorium i budujemy, najwygodniej przy użyciu Eclipse’a. Artykuł nie dotyczy samego DdlUtils, więc nie będę się na ten temat rozpisywał, niezbędne informacje można znaleźć na stronie projektu. W rezultacie budowania powinniśmy otrzymać plik dystrybucji, ddl-utils-1.0-rc1.jar, ale może on się nazywać inaczej, w zależności od tego jakiej metody budowania użyliśmy. Będą nam także potrzebne biblioteki dystrybuowane z kodem źródłowym projektu.

Zaczynamy od utworzenia nowego projektu, Eclipse > New > Project, ja swój nazwałem mgr.db. Tworzymy trzy podkatalogi: lib, input i output, za chwile będzie wiadomo, w jakim celu. W katalogu głównym projektu tworzymy skrypt Ant, nazwijmy go build.xml, oraz plik build.properties. Do pliku build.xml wklejamy poniższy tekst:

<?xml version="1.0"?>

<project name="mgr.db" default="fetch-schema" basedir=".">

<property name="output.dir" value="${basedir}/output" />
<property name="input.dir" value="${basedir}/input" />

<property file="${basedir}/build.properties" />

<target name="fetch-schema">
<databaseToDDL>
<database driverclassname="${jdbc.driver}" url="${jdbc.url}"
username="${jdbc.username}" password="${jdbc.password}" />
<writeschematofile outputfile="${output.dir}/schema.xml" />
</databaseToDDL>
</target>

<target name="install-schema">
<databaseFromDDL>
<database driverclassname="${jdbc.driver}" url="${jdbc.url}"
username="${jdbc.username}" password="${jdbc.password}" />
<fileset dir="${input.dir}">
<include name="schema.xml" />
</fileset>
<writeschematodatabase alterdatabase="true" failonerror="true" />
</databaseFromDDL>
</target>

<target name="install-data">
<databaseFromDDL>
<database driverclassname="${jdbc.driver}" url="${jdbc.url}"
username="${jdbc.username}" password="${jdbc.password}" />
<fileset dir="${input.dir}">
<include name="schema.xml" />
</fileset>
<writedatatodatabase usebatchmode="true" batchsize="100">
<fileset dir="${input.dir}">
<include name="data.xml" />
</fileset>
</writedatatodatabase>
</databaseFromDDL>
</target>

<target name="generate-sql">
<databaseFromDDL>
<database driverclassname="${jdbc.driver}" url="${jdbc.url}"
username="${jdbc.username}" password="${jdbc.password}" />
<fileset dir="${input.dir}">
<include name="schema.xml" />
</fileset>
<writeschemasqltofile outputfile="${output.dir}/schema.ddl"
alterdatabase="false" failonerror="true" />
</databaseFromDDL>
</target>

</project>

Skrypt wyjaśnia powód istnienia katalogów input i output. Plik build.properties zawiera definicję zmiennych określających połączenie do bazy danych na której będziemy operować, w moim przypadku, dla bazy danych MySQL Server 5.0 wygląda on tak:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mgr
jdbc.username=root
jdbc.password=password

Jest jeszcze tylko mały problem. Ant nie rozumie zadań <databaseToDDL> i <databaseFromDDL>, trzeba go więc odpowiednio poinstruować. W tym celu wchodzimy do konfiguracji Ant’a, Eclipse > Window > Preferences > Ant > Runtime, zakładka Classpath, gałąź Global Entries, widzimy następujący ekran:




Klikamy Add External JARs i dodajemy nasz plik dystrybucji DdlUtils, ddl-utils-1.0-rc1.jar. Przechodzimy do zakładki Tasks i klikamy Add Task. Z listy dostępnych plików .jar wybieramy dodany przed chwilą ddl-utils-1.0-rc1.jar. W drzewie zasobów dostępnych w wybranym pliku .jar wybieramy klasę implementującą zadanie Ant które chcemy dodać, podajemy jego nazwę i klikami OK. Wybierzmy więc klasę org.apache.ddlutils.task.DatabaseToDdlTask i nazwę databaseToDDL a następnie klasę org.apache.ddlutils.task.DdlToDatabaseTask i nazwę databaseFromDDL. Operacje te ilustruje poniższy zrzut ekranu:


To już prawie koniec, wystarczy jeszcze tylko dodać wymagane przez DdlUtils biblioteki do ścieżki klas (ang. classpath) skryptu Ant. W tym celu uruchamiamy konfigurator narzędzi zewnętrznych Eclipse > Run > External Tools > External Tools. Po lewej stronie ekranu wybieramy nasz skrypt build.xml i przechodzimy do zakładki Classpath. Widzimy następujący ekran:


W zależności od tego gdzie znajdują się nasze biblioteki wybieramy Add JARs albo Add External JARs. Ja wymagane biblioteki skopiowałem do katalogu lib w projekcie mgr.db. Rekomenduje zrobić to samo teraz. W takim wypadku klikamy Add JARs i dodajemy wszystkie biblioteki z katalogu lib. Oprócz bibliotek z kodu dystrybucji DdlUtils potrzebny będzie jeszcze sterownik JDBC do wybranej bazy danych. Poniższa ilustracja pokazuje jak wygląda teraz nasz projekt, widać tu także kompletną listę wymaganych bibliotek wraz ze sterownikiem JDBC dla MySQL.

Brak komentarzy: