1

Maven3に移行するレガシーWebアプリケーションで問題が発生しています。

ディレクトリ構造内にあるクラスパスからファイルを取得する必要があります。

/src/main/resources/com/thinkglish/geoip/GeoIP.dat

Mavenビルドで.warファイルを作成すると、この.datファイルが(あるべき姿で)次の場所にあることを確認できます。

WEB-INF / classes / com / thinkglish / geoip / GeoIP.dat

私は、javax.servlet.Filterを実装するクラスの1つからリソースを取得するために、2つの異なるアプローチを試みています。

ClassPathResource resource = new ClassPathResource("com/thinkglish/geoip/GeoIp.dat");

URL resource = getClass().getResource("/com/thinkglish/geoip/GeoIp.dat");

MavenのJettyプラグインを使用してアプリケーションを起動すると、どちらの方法でも正常に機能します。ただし、アプリケーションをTomcatにデプロイしてサーバーを起動すると、リソースが見つかりません。

最初のケースではを取得java.io.FileNotFoundException: class path resource [com/thinkglish/geoip/GeoIp.dat] cannot be resolved to URL because it does not existし、2番目のケースではリソースはnullです。

com/thinkglish/struts/i18n/MessageResources.propertiesこれについての不思議なことは、クラスパス(または)から別のリソースを取得しようとしていずれかのメソッドを使用した場合com/thinkglish/filter/LanguageFilter.class、問題なく機能することです。

これについて何か推測はありますか?.dat拡張子がこれと関係がある可能性はありますか?


編集済み-より多くのデータ!

.datファイルが存在するのとまったく同じディレクトリに新しい.propertiesモックファイルを追加しました。

/src/main/resources/com/thinkglish/geoip/mock.properties

Tomcat6で取得しようとしましたが、機能しました

ClassPathResource resource = new ClassPathResource("com/thinkglish/geoip/mock.properties");

Tomcat6が.datファイルをクラスパスリソースとして受け入れるようにするには、構成に関して別のことを行う必要があると思い始めています。

前もって感謝します!

4

2 に答える 2

0

以下が機能するはずです:

String classpathLocation = "com/thinkglish/geoip/GeoIp.dat";
URL classpathResource = Thread.currentThread().getContextClassLoader().getResource(classpathLocation);
// Or:
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(classpathLocation);
于 2012-10-05T18:52:37.710 に答える
0

ここで完全に間違ったツリーを吠えているかもしれません...しかし、GeoIP.dat / GeoIp.datの大文字と小文字を確認しましたか?Tomcatは大文字と小文字を区別するOSで実行されていますか?

于 2012-10-06T09:37:12.127 に答える