Tak toto je vcelku slusna sprostarna, diky za tip!
Property som supol do podadresara a vsetko zda sa funguje ako ma.
Dakujem.
--
Dusan
Pozor na jeden velky zadrhel s classpath*: ak su properties v koreni
JARu, nemusi to fungovat, vid upozornenie
v dokumentacii Springu. Je tam nejaky problem s classloadermi, kde
hviezdicka v roote nefunguje pre JARy.
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/resources.html#resources-wildcards-in-path-other-stuff
Riesenie je davat konfiguraky do META-INF:
myepicproject-configs.jar
|- META-INF
|- applicationContext.xml
a vyraz potom moze byt
|classpath*:META-INF/*.xml|"
On 23. 8. 2012 9:59, Dusan Zatkovsky wrote:
Ahoj,
zjavne som sa snahou o izolovanie problemu do nejakeho jednoducheho
proof-of-concept zamotal.
Principialne mi ide o to, ze mam web aplikaciu, ktora pri
inicializacii spring kontextu nacitava vsetky .properties subory,
ktore sa nachadzaju vo WEB-INF/classes. Tieto property subory sa do
toho adresara dostanu pocas buildu rozkopirovanim
z roznych maven submodulov.
Vid.
<bean id="fooPropertyPlaceholderConfigurer"
class="cz.company.foo.core.utils.props.fooPropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:*.properties</value>
</list>
</property>
Mojim cielom bolo zabalit vsetky property subory do jedneho jar-ka a
to pribalit k webapp. Vzhladom na
uz citovane "...plus classes and resources in JAR files under the
/WEB-INF/lib directory..." som ocakaval,
ze spring tam tie property uvidi bez ohladu na to, ci budu vo war-e,
alebo az v nim includovanom jar-e.
Ale zjavne ich nevidi a ja nechapen, kde je ten rozpor.
Jedine co ma prave teraz napada je, ze spring neni schopny evaluovat
vyraz "*.properties", pretoze v pripade,
ked su vo web-inf, tak sa rozbalia priamo na filesystem do
TOMCAT/web-apps/...../WEB-INF, kdezto ked su v jar, tak
ich proste nevidi ako subory a neni schopny ziskat ich zoznam...
--
Dusan
Ahoj,
ja bezne vo web aplikaciach pouzivam
URL url = MojaTrieda.getResource("…");
a funguje to bez problemov. Vo vasom pripade by to zrejme malo byt
URL url =
MojaTrieda.getResource("/src/main/resources/libresource.properties"); pripadne
iba "/libresource.properties".
Preco sa snazite pouzit getSystemResource a tym padom "System
classloader"? Podla
http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html
System classloader nemoze vidiet resources z webovych aplikacii.
Pouzite bud getResource z nejakej vasej classy (ta je urcite
nacitana webovym classloaderom), alebo pouzite classloader zo
ServletContext.getClassLoader().
-Peter
On 22.8.2012, at 17:15, Dusan Zatkovsky <[email protected]> wrote:
Ahoj.
Zapasim s nacitavanim resources z classpath webovej aplikacie v
tomcat-e a nejak neviem prist veci na klb.
Mam klasicku ( mavenom buildenu ) aplikaciu zlozenu z:
- lib
- command line client
- webapp
lib.jar obsahuje:
./src/main/resources/libresource.properties
K tomuto suboru pristupujem v cli a webapp pomocou:
URL url =
ClassLoader.getSystemResource("libresource.properties");
Properties p = new Properties();
p.load(ClassLoader.getSystemResourceAsStream("libresource.properties"));
V cli aplikacii to funguje, vo webapp nie ( getSystemResource vrati
null ).
Tomcat v dokumentacii classloader-u pise:
A class loader is created for each web application that is
deployed in a single Tomcat instance.
All unpacked classes and resources in the /WEB-INF/classes
directory of your web application,
--> plus classes and resources in JAR files under the
/WEB-INF/lib directory <-- of your web application,
are made visible to this web application, but not to other ones.
Co je presne co chcem. Ale zjavne to nefunguje tak ako ocakavam.
Vygooglil som, ze riesenim je skopirovat ten property file pocas
buildu priamo do webapp/target/WEB-INF/classes,
co samozrejme nechcem, pretoze to ide presne proti cielu mojho
snazenia ( odstranit z projektu nadbytocne rozkopirovavanie ).
V com robim chybu?
Diky
--
Dusan