1

ArtefactHandlerを実装していて、sからアーティファクトを作成できるようにしたいScript(レガシー形式をサポートするため)。すべてのスクリプトをアーティファクトにしたくはありませんが、grails-appの特定のサブディレクトリにあるスクリプトだけを作成しますgrails-app/foo/

私は自分ArtefactHandlerisArtefactClass方法からアーティファクトの経路を理解しようとして立ち往生しています。クラスの元のソースへのパスを取得する方法、またはそれがに含まれているかどうかを判断する方法はありgrails-app/fooますか?

4

2 に答える 2

1

Grailsは、クラスがファイルシステムのどこにあるかを実際には気にしません。それはただの煙と鏡です。そのため、現在、ロケーションベースのアーティファクトはサポートされていませんが、チケットがあります:http: //jira.codehaus.org/browse/GRAILS-2174

それまでの間、最も簡単な解決策は、スクリプトに特定の命名規則を強制するか、場合によっては何らかのマーカー注釈を導入することです。アノテーションを探しているのに、スクリプトクラスをイントロスペクトする方法がわかりません。

于 2010-01-14T23:02:23.737 に答える
0

ルークは上記の公式の答えを持っていますが、これが私が思いついたハックです:

if (Script.class.isAssignableFrom(clazz)
    && ((DefaultGrailsApplication) ApplicationHolder.getApplication()).
        getResourceLoader().loadGroovySource(clazz.getName()).
        getPath().contains("grails-app/foo")) {
    return true;
}

これにはおそらく多くの問題があります。まず、GrailsApplicationの実装であるDefaultGrailsApplicationに依存しているため、カプセル化に違反しています。次に、組み込みのアーティファクト(taglibsなど)に対してnullを返すように見えるloadGroovySourceため、プラグインやバイナリ形式で配布されるものなどでは機能しない可能性があります。

編集:それは本番環境でも機能しないようです。ふりだしに戻る...

于 2010-01-15T03:27:55.280 に答える