AppFuse 3的亂碼問題

來源:互聯網
上載者:User

標籤:http   pes   說明   warning   過程   nts   輸出   cto   force   

書接上回:AppFuse 3常見問題與解決方案 ,一個新問題:亂碼! 在3.0.0版本號碼下,運行mvn appfuse:full-source命令後使用mvn jetty:run啟動工程,頁面上就出現了亂碼。我要說的是這個亂碼問題很有趣,它的有趣之處在於最後的解決方案看上去與問題差的太遠。這個解決方案是:找到pom中對hibernate3-maven-plugin的配置,將當中的<executions/>部分凝視掉,即不在process-test-resources階段運行hbm2ddl。

(假設你須要匯出schema到資料庫,能夠手動運行mvn hibernate3:hbm2ddl,這也更符合實際開發的須要)。是的,看上去沒有不論什麼關係。可是問題就是出在了這裡!以下我們回退到問題發生時一步步地進行排查。對於本文列出之外的一些細節問題,能夠參考:基於Appfuse 2.1高速構建工程的注意事項 本文原文出處: http://blog.csdn.net/bluishglc/article/details/38640715 嚴禁不論什麼形式的轉載,否則將託付CSDN官方維護權益!



首先,查看編譯之後的輸出檔案夾target/classes下的中文properties檔案。能夠確定這件檔案本身就沒有轉碼,是native2ascii外掛程式沒有正常工作嗎?通過檢查。發現問題不在native2ascii-maven-plugin的配置上。使用mvn clean package -X查看maven運行過程中的log資訊,發現了以下一段有趣的輸出:

[DEBUG] -----------------------------------------------------------------------[DEBUG] Goal:          org.apache.maven.plugins:maven-resources-plugin:2.6:resources (default-resources)[DEBUG] Style:         Regular[DEBUG] Configuration: <?

xml version="1.0" encoding="UTF-8"?><configuration> <buildFilters default-value="${project.build.filters}"/> <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding> <escapeString>${maven.resources.escapeString}</escapeString> <escapeWindowsPaths default-value="true">${maven.resources.escapeWindowsPaths}</escapeWindowsPaths> <includeEmptyDirs default-value="false">${maven.resources.includeEmptyDirs}</includeEmptyDirs> <outputDirectory default-value="${project.build.outputDirectory}"/> <overwrite default-value="false">${maven.resources.overwrite}</overwrite> <project default-value="${project}"/> <resources default-value="${project.resources}"/> <session default-value="${session}"/> <supportMultiLineFiltering default-value="false">${maven.resources.supportMultiLineFiltering}</supportMultiLineFiltering> <useBuildFilters default-value="true"/> <useDefaultDelimiters default-value="true"/></configuration>[DEBUG] -----------------------------------------------------------------------[DEBUG] Goal: org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile)[DEBUG] Style: Regular[DEBUG] Configuration: <?

xml version="1.0" encoding="UTF-8"?><configuration> <basedir default-value="${basedir}"/> <buildDirectory default-value="${project.build.directory}"/> <classpathElements default-value="${project.compileClasspathElements}"/> <compileSourceRoots default-value="${project.compileSourceRoots}"/> <compilerId default-value="javac">${maven.compiler.compilerId}</compilerId> <compilerReuseStrategy default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy> <compilerVersion>${maven.compiler.compilerVersion}</compilerVersion> <debug default-value="true">${maven.compiler.debug}</debug> <debuglevel>${maven.compiler.debuglevel}</debuglevel> <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding> <executable>${maven.compiler.executable}</executable> <failOnError default-value="true">${maven.compiler.failOnError}</failOnError> <forceJavacCompilerUse default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse> <fork default-value="false">${maven.compiler.fork}</fork> <generatedSourcesDirectory default-value="${project.build.directory}/generated-sources/annotations"/> <maxmem>${maven.compiler.maxmem}</maxmem> <meminitial>${maven.compiler.meminitial}</meminitial> <mojoExecution>${mojoExecution}</mojoExecution> <optimize default-value="false">${maven.compiler.optimize}</optimize> <outputDirectory default-value="${project.build.outputDirectory}"/> <projectArtifact default-value="${project.artifact}"/> <showDeprecation default-value="false">${maven.compiler.showDeprecation}</showDeprecation> <showWarnings default-value="false">${maven.compiler.showWarnings}</showWarnings> <skipMain>${maven.main.skip}</skipMain> <skipMultiThreadWarning default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning> <source default-value="1.5">1.7</source> <staleMillis default-value="0">${lastModGranularityMs}</staleMillis> <target default-value="1.5">1.7</target> <useIncrementalCompilation default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation> <verbose default-value="false">${maven.compiler.verbose}</verbose> <mavenSession default-value="${session}"/> <session default-value="${session}"/></configuration>[DEBUG] -----------------------------------------------------------------------[DEBUG] Goal: org.codehaus.mojo:native2ascii-maven-plugin:1.0-beta-1:native2ascii (native2ascii-utf8)[DEBUG] Style: Regular[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?><configuration> <encoding default-value="${project.build.sourceEncoding}">UTF8</encoding> <includes> <include>ApplicationResources_zh*.properties</include> <include>displaytag_zh*.properties</include> </includes> <tempDir default-value="${project.build.directory}"/> <workDir default-value="${project.build.outputDirectory}"/></configuration>[DEBUG] -----------------------------------------------------------------------[DEBUG] Goal: org.apache.maven.plugins:maven-resources-plugin:2.6:testResources (default-testResources)[DEBUG] Style: Regular[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?

><configuration> <buildFilters default-value="${project.build.filters}"/> <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding> <escapeString>${maven.resources.escapeString}</escapeString> <escapeWindowsPaths default-value="true">${maven.resources.escapeWindowsPaths}</escapeWindowsPaths> <includeEmptyDirs default-value="false">${maven.resources.includeEmptyDirs}</includeEmptyDirs> <outputDirectory default-value="${project.build.testOutputDirectory}"/> <overwrite default-value="false">${maven.resources.overwrite}</overwrite> <project default-value="${project}"/> <resources default-value="${project.testResources}"/> <session default-value="${session}"/> <skip>${maven.test.skip}</skip> <supportMultiLineFiltering default-value="false">${maven.resources.supportMultiLineFiltering}</supportMultiLineFiltering> <useBuildFilters default-value="true"/> <useDefaultDelimiters default-value="true"/></configuration>[DEBUG] --- init fork of com.github:demo:1.0-SNAPSHOT for org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2ddl (default) ---[DEBUG] Dependencies (collect): [][DEBUG] Dependencies (resolve): [][DEBUG] -----------------------------------------------------------------------[DEBUG] Goal: org.apache.maven.plugins:maven-resources-plugin:2.6:resources (default-resources)[DEBUG] Style: Regular[DEBUG] Configuration: <?

xml version="1.0" encoding="UTF-8"?><configuration> <buildFilters default-value="${project.build.filters}"/> <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding> <escapeString>${maven.resources.escapeString}</escapeString> <escapeWindowsPaths default-value="true">${maven.resources.escapeWindowsPaths}</escapeWindowsPaths> <includeEmptyDirs default-value="false">${maven.resources.includeEmptyDirs}</includeEmptyDirs> <outputDirectory default-value="${project.build.outputDirectory}"/> <overwrite default-value="false">${maven.resources.overwrite}</overwrite> <project default-value="${project}"/> <resources default-value="${project.resources}"/> <session default-value="${session}"/> <supportMultiLineFiltering default-value="false">${maven.resources.supportMultiLineFiltering}</supportMultiLineFiltering> <useBuildFilters default-value="true"/> <useDefaultDelimiters default-value="true"/></configuration>[DEBUG] --- exit fork of com.github:demo:1.0-SNAPSHOT for org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2ddl (default) ---


這段log的有趣之處在於:resources:resources 被運行了兩次。第一次是在native2ascii:native2ascii之前,第二次是在 native2ascii:native2ascii 運行之後運行hbm2ddl時又被又一次調用了一次。為了準確地瞭解resources:resources和native2ascii:native2ascii的運行順序,我們從它們各自的文檔上找到它們預設綁定的周期說明:


resources:resources -> process-resources

native2ascii:native2ascii -> process-classes


maven的預設生命週期例如以下:   

<phases>  <phase>validate</phase>  <phase>initialize</phase>  <phase>generate-sources</phase>  <phase>process-sources</phase>  <phase>generate-resources</phase>  <phase>process-resources</phase>  <phase>compile</phase>  <phase>process-classes</phase>  <phase>generate-test-sources</phase>  <phase>process-test-sources</phase>  <phase>generate-test-resources</phase>  <phase>process-test-resources</phase>  <phase>test-compile</phase>  <phase>process-test-classes</phase>  <phase>test</phase>  <phase>prepare-package</phase>  <phase>package</phase>  <phase>pre-integration-test</phase>  <phase>integration-test</phase>  <phase>post-integration-test</phase>  <phase>verify</phase>  <phase>install</phase>  <phase>deploy</phase></phases>

依照正常的邏輯, resources:resources會先於native2ascii:native2ascii將全部指定的resource檔案進行filter處理之後放置於target檔案夾下,之後native2ascii:native2ascii跟進。對指定的檔案進行轉碼。這是很合理的處理方式,而我們的問題就出如今了對resources:resources第二次不正常的調用,這導致了之前經過轉碼的檔案又被未經轉碼的檔案覆蓋了。從日誌上看,導致resources:resources第二次啟動並執行原因應該是在進入process-test-resources階段後運行hbm2ddl觸發的。也就是說是hbm2ddl的某個動作主動調用了resources:resources,至於詳細的細節。是bug還是與maven3的相容問題,這裡我們不再深究,可是解決方案已經變得很清晰上,就是前文提到的做法。

AppFuse 3的亂碼問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.