Android Studio無法執行Java main方法的問題

Android Studio升級到最新版3.6.1後,新建了個項目,發現無法執行Java類的main方法,很蛋疼。試了網上的各種方法,比如切換gradle離線模式、gradle.properties中添加android.enableAapt2=false等,我還嘗試了重新情況Gradle緩存、重新下載gradle等方式,都沒用。

環境
android studio版本:3.6.1
gradle版本:5.6.4
gradle插件版本:3.6.1

錯誤提示
11:41:35 PM: Executing task 'TxtUtil.main()'...

Executing tasks: [TxtUtil.main()] in project /Users/tinytongtong/Documents/workspace/as/self/BlogDemo


FAILURE: Build failed with an exception.

* Where:
Initialization script '/private/var/folders/qw/8_p1t59142d0xntgn799rt1c0000gn/T/TxtUtil_main__.gradle' line: 20

* What went wrong:
A problem occurred configuring project ':app'.
> Could not create task ':app:TxtUtil.main()'.
   > SourceSet with name 'main' not found.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.6.4/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 207ms
11:41:35 PM: Task execution finished 'TxtUtil.main()'.


解決方案:
方案一:暫時的替代方案
Run "XXX.main()" with Coverage
1


方案二:修改.idea/gradle.xml文件
Android Studio使用gradle作爲構建工具,所以歸根到底還是gradle配置的問題。我先找一個沒問題的項目,再打開新創建的項目,對比着看他們的gradle配置。經過對比和嘗試,發現.idea/gradle.xml文件內部不同,並且參照老項目進行修改是有效的。

老項目的.idea/gradle.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="GradleMigrationSettings" migrationVersion="1" />
  <component name="GradleSettings">
    <option name="linkedExternalProjectsSettings">
      <GradleProjectSettings>
        <option name="delegatedBuild" value="false" />
        <option name="testRunner" value="PLATFORM" />
        <option name="distributionType" value="DEFAULT_WRAPPED" />
        <option name="externalProjectPath" value="$PROJECT_DIR$" />
        <option name="modules">
          <set>
            <option value="$PROJECT_DIR$" />
            <option value="$PROJECT_DIR$/app" />
            ...
          </set>
        </option>
        <option name="resolveModulePerSourceSet" value="false" />
      </GradleProjectSettings>
    </option>
  </component>
</project>

新項目的.idea/gradle.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="GradleMigrationSettings" migrationVersion="1" />
  <component name="GradleSettings">
    <option name="linkedExternalProjectsSettings">
      <GradleProjectSettings>
        <option name="testRunner" value="PLATFORM" />
        <option name="distributionType" value="DEFAULT_WRAPPED" />
        <option name="externalProjectPath" value="$PROJECT_DIR$" />
        <option name="modules">
          <set>
            <option value="$PROJECT_DIR$" />
            <option value="$PROJECT_DIR$/app" />
          </set>
        </option>
        <option name="resolveModulePerSourceSet" value="false" />
      </GradleProjectSettings>
    </option>
  </component>
</project>

經過對比發現,新項目的<GradleProjectSettings>標籤下少了<option name="delegatedBuild" value="false" />這行配置,然後給新項目添加這行配置,運行代碼發現成功了。

根據配置的字面意思理解,這個設置的意思是不委託gradle進行構建。現實效果也是加了這行配置之後就是jvm執行Java類的main方法了,而不是gradle當做task來執行了。

個人能力有限,如有錯誤盡請指正。
————————————————
版權聲明:本文爲CSDN博主「tinyvampirepudge」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_26287435/article/details/104749689

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章