11

私の根本的な問題は、コントローラーと Freemarker ビューに対して「spring-test」ベースのテストを実行するときに、すべての taglibs を WEB-INF/lib フォルダー内に配置する必要があることです。そうしないと、freemarker がテスト中にそれらを見つけられません。次のmaven構成でこの問題を解決しました。実際には、テストを実行する前に taglibs jar を src/main/webapp/WEB-INF/lib フォルダーにコピーします。IDE でこのテストを実行しても問題は同じであるため、このフォルダーをクリアしたくありません。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.3</version>
<executions>
    <!-- Freemaarker requires that all taglibs should reside in WEB-INF/lib folder -->
    <execution>
        <id>tests</id>
        <phase>test-compile</phase>
        <goals>
            <goal>copy</goal>
        </goals>
        <configuration>
            <outputDirectory>${basedir}/src/main/webapp/WEB-INF/lib/</outputDirectory>
            <artifactItems>
                <artifactItem>
                    <groupId>org.springframework.security</groupId>
                    <artifactId>spring-security-taglibs</artifactId>
                    <version>${spring.security.version}</version>
                </artifactItem>
            </artifactItems>
        </configuration>
    </execution>
</executions>
</plugin>

現在、プロジェクトをgradleに移行しています。どうすればgradleで同じことを達成できますか?

4

1 に答える 1

19

これが私がこの問題を解決した方法です(実際にはmavenと同じです):

依存関係の別の構成を追加します。

configurations { 
    taglibs { transitive = false }
}

この構成に必要な依存関係を追加します。

dependencies {
    ...
    taglibs "org.springframework.security:spring-security-taglibs:$springSecurityVersion"
    ...
}

これらの依存関係を必要なフォルダーにコピーする gradle コードを追加します。

task copytaglibs(type: Copy) { 
    from configurations.taglibs
    into 'src/main/webapp/WEB-INF/lib'
} 

compileTestJava {
   dependsOn copytaglibs
}

これです。

于 2013-05-19T18:17:36.580 に答える