我想在同一个tomcat中使用不同的DB同时运行不同版本的Grails(2.3.5)应用程序。
目前我有一个外部配置文件,我指定了我的数据库配置。
文件名是硬编码的:
D:\maqtary\logicaldoc-6.7.1-src\build\poms>mvn -version
Apache Maven 3.0.3 (r1075438; 2011-02-28 09:31:09-0800)
Maven home: C:\Users\PC\Downloads\apache-maven-3.0.3
Java version: 1.7.0_80, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_80\jre
Default locale: en_US, platform encoding: Cp1256
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"
D:\maqtary\logicaldoc-6.7.1-src\build\poms>mvn install
[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR] The project com.logicaldoc:logicaldoc-parent-pom:62
(D:\maqtary\logicaldoc-6.7.1-src\build\poms\pom.xml) has 1 error
[ERROR] Unresolveable build extension: Error resolving version for plugin
'org.apache.maven.wagon:wagon-ssh' from the repositories [local
(C:\Users\PC\.m2\repository), central (http://repo1.maven.
org/maven2)]: Plugin not found in any plugin repository -> [Help 2]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e
switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please
read the following articles:
[ERROR] [Help 1]
http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2]
“sc.war”是我的war文件的名称。由于我现在想要/需要运行多个版本,我想创建conf文件变量的名称。
<tomcat-home>/conf/sc.conf
有没有办法在运行时获取war-file-name?
我愿意以其他方式解决我的问题。谢谢你的帮助。
答案 0 :(得分:0)
您只需将applicationBaseDir路径提供给外部配置文件
即可applicationBaseDir = ""
println "Bootstrapping application"
println ">>>>>>>>Environment >>>>>"+GrailsUtil.environment
Environment.executeForCurrentEnvironment {
development {
println "Keeping applicationBaseDir "+grailsApplication.config.applicationBaseDir+" as is."
}
production {
//Following code finds your project path and set applicationBaseDir
Process findPresentWorkingDirectory = "pwd".execute()
def pwd = findPresentWorkingDirectory.text
def pwdTokens = pwd.tokenize("/")
pwdTokens.pop()
applicationBaseDir = pwdTokens.join("/")
println ">>>> applicationBaseDir "+applicationBaseDir
applicationBaseDir = "/"+applicationBaseDir+"/webapps/applicationDir/"
println 'grailsApplication.config.applicationBaseDir '+applicationBaseDir
}
}
或者直接在外部配置文件中设置applicationBaseDir
applicationBaseDir = "/home/tomcat/webapps/applicationDir/"
现在,将特定的外部配置文件添加到代码
的项目文件Config.groovy文件中environments {
development {
String codeSystemClassFilePath = AnyDomainClassNameFromYourApplication.class.getProtectionDomain().getCodeSource().getLocation().getPath()
// Here AnyDomainClassNameFromYourApplication change to your application domain class name e.g.I have domain class Student then I replace it with Student
def arrayWithLastValueAsProjectName = codeSystemClassFilePath.split('/target/classes/')[0].split('/')
String projectName = arrayWithLastValueAsProjectName[arrayWithLastValueAsProjectName.size()-1]
println "App name in dev==>"+projectName
grails.logging.jul.usebridge = true
grails.config.locations = [
"file:${userHome}/grails/${projectName}.groovy"
]
grails.assets.storagePath = ""
}
production {
String codeSystemClassFilePath = AnyDomainClassNameFromYourApplication.class.getProtectionDomain().getCodeSource().getLocation().getPath()
def arrayWithLastValueAsProjectName = codeSystemClassFilePath.split('/WEB-INF/classes/')[0].split('/')
String projectName = arrayWithLastValueAsProjectName[arrayWithLastValueAsProjectName.size()-1]
println "App name in production==>"+projectName
grails.logging.jul.usebridge = false
grails.config.locations = [
"file:${userHome}/grails/${projectName}.groovy"
]
}
}
//here grails/ is my default folder use to store exernal-config-files
我希望这可以帮到你!