[Java lista] Maven dependencia

Tamás Cservenák tamas at cservenak.net
2010. Már. 21., V, 01:17:23 CET


Hi,

Golden Rule No1: Mojo-t nem bovitunk! (pontosabban, maven-plugin packaging
tipusu artifactot ne hasznalj dependency-kent). A fent leirt POM peldaban te
pluginkent de dependency-kent is hasznalod. Eeee. Rossz.

Ha reusable kod kell, akkor azt mozgasd/refactor ki a Mojobol (annak idevalo
reszeit, a plugin modulbol) egy harmadik reusable modulba. A Mojo-k (maven
pluginek) alapvetoen csak _valaminek_ a konfiguralasat es meghivasat kellene
hogy tartalmazzak. Ha azt veszed eszre, hogy a mojo a _valami_ konfiguralasa
es meghivasan tul mast is tartalmaz, rossz uton jarsz. Ha azt veszed eszre,
hogy fuggoseged van egy maven-plugin artifact-ra, rossz uton jarsz. Ha azt
veszed eszre, hogy "egy mojo/maven-plugin artifactot kell bovitened", rossz
uton jarsz, refactor, uj modul...

A Mojo-kra (maven-plugin-ekre) "dead end"-kent kell tekinteni. Mint egy
"final" metodus vagy osztaly. Nem bovitendo.


Ha jol latom, a moduleA es moduleB a te "fennhatosagod" alatt van, tehat a
fent leirt modositast megcsinalhatod. Akkor lesz egy "kozos" moduleC. Igy
mar a pom-ok is trivialisak lesznek.

moduleA (p: maven-plugin) fuggosegei: moduleC(p:jar, scope: compile),
mysql-connector (p:jar, scope: test) [vagy "optional"!]
moduleB (p: maven-plugin) fuggosegei: moduleC(p:jar, scope: compile), pgsql
(p:jar, scope: compile)

Ne feledd No1: a maven plugin API javadoc annotations-t hasznal, nem eleg
boviteni az osztalyt, kell a forras is!!! (ezt sokan elfelejtik)
Ne feledd No2: attol, hogy a packaging _nem_ "maven-plugin" hanem "jar", te
meg hivatkozhatsz a maven-plugin-api-ra mint dependency, es irhatsz
"reusable mojo" cuccokat....

===

A baj ott van, ha egy "rosszul megirt" Mojo-ra fullik a fogad..... es az nem
a te projekted.

De az mar ganyolas, viszont sokat tud segiteni:
http://www.ops4j.org/projects/pax/construct/maven-inherit-plugin/

Thanks,
~t~

2010/3/20 Elek Márton <einstand at gmail.com>

> Én ezt próbálnám ki:
>
> <plugins>
>     <plugin>
>       <groupId>AGroup</groupId>
>       <artifactId>AArtifact</artifactId>
>       <version>1.0-SNAPSHOT</version>
>        <dependencies>
> <dependency>
>     <groupId>mysql</groupId>
>     <artifactId>mysql-connector-java</artifactId>
>     <version>5.1.12</version>
>     <scope>runtime</scope>
>   </dependency>
>        </dependencies>
>     </plugin>
> </plugins>
>
> ĂĽdv
> m.
>
> ps:
>
> A maven pluginek alapvetően nem látják a futtató maven projekt függőségeit.
>
> A legtöbb esetben nem is kell, ritkán előfordul, hogy mégis kéne.
> Ilyenkor azt a workaroundot szoktam látni, hogy a projekt leíróból
> kiszedik a szükséges függőségeket, és miután resolválták (Maven
> pluginből ugye ez nem túl bonyolult) kézzel összedobnak egy
> classloadert, ami tartalmazza azokat a jar-okat is. (Lásd pl. JAX-WS
> plugin. Aminek a működése közben elő is fordulnak néha furcsaságok
> szerintem pont a classloaderes tákolás miatt).
>
> A fenti eset persze nem ez az eset.
>
>
> 2010/3/20 sashee <gsashee at gmail.com>:
> > Szia!
> >
> > Használ JDBC-t, de nem akarom a mysql-connector-java-t oda beégetni,
> > mert lehet, hogy mondjuk máshol meg a pgsql-re lesz szükség. 'B' függ
> > 'A'-tĂłl.
> >
> > 'B' pom-jából ide vonatkozó részek:
> > ...
> >    <plugins>
> >      <plugin>
> >        <groupId>AGroup</groupId>
> >        <artifactId>AArtifact</artifactId>
> >        <version>1.0-SNAPSHOT</version>
> >      </plugin>
> >    </plugins>
> > ...
> >    <dependency>
> >      <groupId>AGroup</groupId>
> >      <artifactId>AArtifact</artifactId>
> >      <version>1.0-SNAPSHOT</version>
> >    </dependency>
> >    <dependency>
> >      <groupId>mysql</groupId>
> >      <artifactId>mysql-connector-java</artifactId>
> >      <version>5.1.12</version>
> >      <scope>runtime</scope>
> >    </dependency>
> > ...
> >
> > 'A' pom-jából érdekes rész lehet talán:
> > ...
> >  <packaging>maven-plugin</packaging>
> > ...
> >
> > Tehát valahogy 'A' futásához akarok adni egy plusz dependenciát, amit
> > 'B'-ben veszek fel, és a buildet is 'B'-ből indítom.
> >
> > Remélem így már érthetőbb
> >
> > sashee
> >
> > 2010/3/20 Forgó Zoltán <zforgo at gmail.com>:
> >> Ăśdv!
> >> Nem igazán értem. A használ JDBC-t, de nem akarod felvenni oda a
> drivert?
> >> A és B milyen viszonyban van egymással?
> >> Ha B függ A projekttől vagy modultól, akkor bizonyos esetben A
> függőségeit
> >> látja tranzitív függőségként. De nyilván A nem lát B-ből semmit. Nem is
> >> dolga Ă©s ez Ă­gy van jĂłl.
> >> Esetleg konkrét pom.xml-lel tudsz szolgálni?
> >> Z
> >>
> >> 2010/3/20 sashee <gsashee at gmail.com>
> >>>
> >>> Sziasztok!
> >>>
> >>> Próbálkozok Mavennel, de el is akadtam rögtön. Adott 2 projectem, 'A'
> >>> és 'B'. 'A' egy framework, ami tud adatbázist kezelni JDBC-vel, de
> >>> értelemszerűen nem akarom ide felvenni a JDBC drivert dependenciának.
> >>> 'A'-ban vannak MOJO-k, amiket 'B'-ből szeretnék hívni, ami kezel
> >>> adatázist. Azt szeretném elérni, hogy a konkrét JDBC driver-t csak
> >>> 'B'-ben kelljen felvenni dependenciának. Most viszont amikor 'B'-ből
> >>> meghívom (parancssorból) 'A'-t, akkor nem fogja hozzááadni a
> >>> dependenciáit. Tehát az utasítás, amit használok: mvn
> >>> AGroupId:AArtifactId:AGoal, de a 'B' projecten belĂĽl adom ki. Hogyan
> >>> lehetne neki megmondani, hogy a 'B'-ben beállított JDBC drivert is
> >>> használja ilyenkor?
> >>>
> >>> Köszi előre is, remélem érthető a probléma
> >>>
> >>> sashee
> >>> _______________________________________________
> >>> Javalist mailing list
> >>> Javalist at javagrund.hu
> >>> http://javagrund.hu/mailman/listinfo/javalist
> >>
> >>
> >> _______________________________________________
> >> Javalist mailing list
> >> Javalist at javagrund.hu
> >> http://javagrund.hu/mailman/listinfo/javalist
> >>
> >>
> > _______________________________________________
> > Javalist mailing list
> > Javalist at javagrund.hu
> > http://javagrund.hu/mailman/listinfo/javalist
> >
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20100321/d5b17263/attachment-0001.html 


További információk a(z) Javalist levelezőlistáról