[Java lista] Maven dependencia

sashee gsashee at gmail.com
2010. Már. 21., V, 12:15:44 CET


Köszi a tippeket mindenkinek. Magát a mojo-t nem bővítem, csak
ugyanabban a projectben van mojo is, meg libként is használom. Valóban
át lehetne refaktorálni, de egyelőre még nincs rá szükség (nem
enterprise projectbe lesz, hanem egy egyetemibe, ezért nem valószínű,
hogy akkorára hízna, hogy szükséges legyen). A problémára végülis
találtam megoldást. A <plugin> alá lehet <dependencies>-t tenni, és
akkor azokat is hozzáadja, így az 'A'-ba nem kell felvenni a mysql
drivert.

sashee

2010/3/21 Tamás Cservenák <tamas at cservenak.net>:
> 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
>
>
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>
>


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