Maven 原型在执行 Groovy 脚本时引发错误
Maven archetype raise error on executing Groovy script
我制作了一个自定义的 Maven Archetype 并基于 Maven Documentation,将文件 archetype-post-generate.groovy 添加到 src/main/resources/META-INF文件夹。
在这个 groovy 脚本中,我想连接到数据库并根据数据执行一些操作。
脚本如下:
import groovy.sql.Sql
Sql.withInstance(
'jdbc:sqlserver://localhost:1433;databaseName=db;',
'sa',
'pass',
'com.microsoft.sqlserver.jdbc.SQLServerDriver') { sql ->
List rows = sql.rows('SELECT top 5 id, description FROM Project')
for(row in rows) {
println row.getProperty("id")
println row.getProperty("description")
println "/*************\"
}
}
当我用它生成模块时安装原型后,一旦执行脚本,就会出现以下错误:
Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.2.0:generate (default-cli) on project standalone-pom: startup failed:
Script1.groovy: 1: unable to resolve class groovy.sql.Sql
@ line 1, column 1.
import groovy.sql.Sql
^
1 error
有什么办法可以解决这个问题吗?
根据@emilles 的指导和Groovy documentation,我们可以使用@Grab
注释将任何库添加到脚本的类路径中。
例如:
@Grab('org.codehaus.groovy:groovy-sql:2.4.16')
@Grab('com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8')
我制作了一个自定义的 Maven Archetype 并基于 Maven Documentation,将文件 archetype-post-generate.groovy 添加到 src/main/resources/META-INF文件夹。
在这个 groovy 脚本中,我想连接到数据库并根据数据执行一些操作。
脚本如下:
import groovy.sql.Sql
Sql.withInstance(
'jdbc:sqlserver://localhost:1433;databaseName=db;',
'sa',
'pass',
'com.microsoft.sqlserver.jdbc.SQLServerDriver') { sql ->
List rows = sql.rows('SELECT top 5 id, description FROM Project')
for(row in rows) {
println row.getProperty("id")
println row.getProperty("description")
println "/*************\"
}
}
当我用它生成模块时安装原型后,一旦执行脚本,就会出现以下错误:
Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.2.0:generate (default-cli) on project standalone-pom: startup failed:
Script1.groovy: 1: unable to resolve class groovy.sql.Sql
@ line 1, column 1.
import groovy.sql.Sql
^
1 error
有什么办法可以解决这个问题吗?
根据@emilles 的指导和Groovy documentation,我们可以使用@Grab
注释将任何库添加到脚本的类路径中。
例如:
@Grab('org.codehaus.groovy:groovy-sql:2.4.16')
@Grab('com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8')