28

为 Kotlin 项目设置编译选项 - 技术小黑屋

 4 years ago
source link: https://droidyue.com/blog/2019/07/21/configure-kotlin-compiler-options/?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

为 Kotlin 项目设置编译选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
kotlinc -help
Usage: kotlinc-jvm <options> <source files>
where possible options include:
  -classpath (-cp) <path>    Paths where to find user class files
  -d <directory|jar>         Destination for generated class files
  -include-runtime           Include Kotlin runtime in to resulting .jar
  -java-parameters           Generate metadata for Java 1.8 reflection on method parameters
  -jdk-home <path>           Path to JDK home directory to include into classpath, if differs from default JAVA_HOME
  -jvm-target <version>      Target version of the generated JVM bytecode (1.6 or 1.8), default is 1.6
  -module-name <name>        Name of the generated .kotlin_module file
  -no-jdk                    Don't include Java runtime into classpath
  -no-reflect                Don't include kotlin-reflect.jar into classpath
  -no-stdlib                 Don't include kotlin-stdlib.jar or kotlin-reflect.jar into classpath
  -script                    Evaluate the script file
  -script-templates <fully qualified class name[,]>
                             Script definition template classes
  -Werror                    Report an error if there are any warnings
  -api-version <version>     Allow to use declarations only from the specified version of bundled libraries
  -X                         Print a synopsis of advanced options
  -help (-h)                 Print a synopsis of standard options
  -kotlin-home <path>        Path to Kotlin compiler home directory, used for runtime libraries discovery
  -language-version <version> Provide source compatibility with specified language version
  -P plugin:<pluginId>:<optionName>=<value>
                             Pass an option to a plugin
  -progressive               Enable progressive compiler mode.
                             In this mode, deprecations and bug fixes for unstable code take effect immediately,
                             instead of going through a graceful migration cycle.
                             Code written in the progressive mode is backward compatible; however, code written in
                             non-progressive mode may cause compilation errors in the progressive mode.
  -nowarn                    Generate no warnings
  -verbose                   Enable verbose logging output
  -version                   Display compiler version
  @<argfile>                 Expand compiler arguments from the given file, containing one argument or file path per line

如下是更加高级的选项(使用kotlinc -X获取)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
 kotlinc -X
Usage: kotlinc-jvm <options> <source files>
where advanced options include:
  -Xadd-compiler-builtins    Add definitions of built-in declarations to the compilation classpath (useful with -no-stdlib)
  -Xadd-modules=<module[,]>  Root modules to resolve in addition to the initial modules,
                             or all modules on the module path if <module> is ALL-MODULE-PATH
  -Xassertions={always-enable|always-disable|jvm|legacy}
                             Assert calls behaviour
                             -Xassertions=always-enable:  enable, ignore jvm assertion settings;
                             -Xassertions=always-disable: disable, ignore jvm assertion settings;
                             -Xassertions=jvm:            enable, depend on jvm assertion settings;
                             -Xassertions=legacy:         calculate condition on each call, check depends on jvm assertion settings in the kotlin package;
                             default: legacy
  -Xbuild-file=<path>        Path to the .xml build file to compile
  -Xcompile-java             Reuse javac analysis and compile Java source files
  -Xnormalize-constructor-calls={disable|enable}
                             Normalize constructor calls (disable: don't normalize; enable: normalize),
                             default is 'disable' in language version 1.2 and below,
                             'enable' since language version 1.3
  -Xdump-declarations-to=<path> Path to JSON file to dump Java to Kotlin declaration mappings
  -Xdisable-default-scripting-plugin
                             Do not enable scripting plugin by default
  -Xdisable-standard-script  Disable standard kotlin script support
  -Xfriend-paths=<path>      Paths to output directories for friend modules (whose internals should be visible)
  -Xmultifile-parts-inherit  Compile multifile classes as a hierarchy of parts and facade
  -Xmodule-path=<path>       Paths where to find Java 9+ modules
  -Xjavac-arguments=<option[,]> Java compiler arguments
  -Xjsr305={ignore/strict/warn}|under-migration:{ignore/strict/warn}|@<fq.name>:{ignore/strict/warn}
                             Specify behavior for JSR-305 nullability annotations:
                             -Xjsr305={ignore/strict/warn}                   globally (all non-@UnderMigration annotations)
                             -Xjsr305=under-migration:{ignore/strict/warn}   all @UnderMigration annotations
                             -Xjsr305=@<fq.name>:{ignore/strict/warn}        annotation with the given fully qualified class name
                             Modes:
                               * ignore
                               * strict (experimental; treat as other supported nullability annotations)
                               * warn (report a warning)
  -Xjvm-default={disable|enable|compatibility}
                             Allow to use '@JvmDefault' annotation for JVM default method support.
                             -Xjvm-default=disable         Prohibit usages of @JvmDefault
                             -Xjvm-default=enable          Allow usages of @JvmDefault; only generate the default method
                                                           in the interface (annotating an existing method can break binary compatibility)
                             -Xjvm-default=compatibility   Allow usages of @JvmDefault; generate a compatibility accessor
                                                           in the 'DefaultImpls' class in addition to the interface method
  -Xload-builtins-from-dependencies
                             Load definitions of built-in declarations from module dependencies, instead of from the compiler
  -Xno-call-assertions       Don't generate not-null assertions for arguments of platform types
  -Xno-exception-on-explicit-equals-for-boxed-null
                             Do not throw NPE on explicit 'equals' call for null receiver of platform boxed primitive type
  -Xno-optimize              Disable optimizations
  -Xno-param-assertions      Don't generate not-null assertions on parameters of methods accessible from Java
  -Xno-receiver-assertions   Don't generate not-null assertion for extension receiver arguments of platform types
  -Xsanitize-parentheses     Transform '(' and ')' in method names to some other character sequence.
                             This mode can BREAK BINARY COMPATIBILITY and is only supposed to be used as a workaround
                             of an issue in the ASM bytecode framework. See KT-29475 for more details
  -Xscript-resolver-environment=<key=value[,]>
                             Script resolver environment in key-value pairs (the value could be quoted and escaped)
  -Xsingle-module            Combine modules for source files and binary dependencies into a single module
  -Xskip-runtime-version-check Allow Kotlin runtime libraries of incompatible versions in the classpath
  -Xstrict-java-nullability-assertions
                             Generate nullability assertions for non-null Java expressions
  -Xgenerate-strict-metadata-version
                             Generate metadata with strict version semantics (see kdoc on Metadata.extraInt)
  -Xsupport-compatqual-checker-framework-annotations=enable|disable
                             Specify behavior for Checker Framework compatqual annotations (NullableDecl/NonNullDecl).
                             Default value is 'enable'
  -Xuse-ir                   Use the IR backend
  -Xuse-javac                Use javac for Java source and class files analysis
  -Xuse-old-class-files-reading Use old class files reading implementation. This may slow down the build and cause problems with Groovy interop.
                             Should be used in case of problems with the new implementation
  -Xuse-type-table           Use type table in metadata serialization
  -Xallow-kotlin-package     Allow compiling code in package 'kotlin' and allow not requiring kotlin.stdlib in module-info
  -Xallow-result-return-type Allow compiling code when `kotlin.Result` is used as a return type
  -Xcommon-sources=<path>    Sources of the common module that need to be compiled together with this module in the multi-platform mode.
                             Should be a subset of sources passed as free arguments
  -Xcoroutines={enable|warn|error}
                             Enable coroutines or report warnings or errors on declarations and use sites of 'suspend' modifier
  -Xdisable-phases           Disable backend phases
  -Xdump-perf=<path>         Dump detailed performance statistics to the specified file
  -Xeffect-system            Enable experimental language feature: effect system
  -Xexperimental=<fq.name>   Enable and propagate usages of experimental API for marker annotation with the given fully qualified name
  -Xintellij-plugin-root=<path> Path to the kotlin-compiler.jar or directory where IntelliJ configuration files can be found
  -Xlegacy-smart-cast-after-try Allow var smart casts despite assignment in try block
  -Xlist-phases              List backend phases
  -Xmetadata-version         Change metadata version of the generated binary files
  -Xmulti-platform           Enable experimental language support for multi-platform projects
  -Xnew-inference            Enable new experimental generic type inference algorithm
  -Xno-check-actual          Do not check presence of 'actual' modifier in multi-platform projects
  -Xno-inline                Disable method inlining
  -Xphases-to-dump           Dump backend state both before and after these phases
  -Xphases-to-dump-after     Dump backend state after these phases
  -Xphases-to-dump-before    Dump backend state before these phases
  -Xplugin=<path>            Load plugins from the given classpath
  -Xprofile-phases           Profile backend phases
  -Xproper-ieee754-comparisons Generate proper IEEE 754 comparisons in all cases if values are statically known to be of primitive numeric types
  -Xread-deserialized-contracts Enable reading of contracts from metadata
  -Xreport-output-files      Report source to output files mapping
  -Xreport-perf              Report detailed performance statistics
  -Xskip-metadata-version-check Load classes with bad metadata version anyway (incl. pre-release classes)
  -Xuse-experimental=<fq.name> Enable, but don't propagate usages of experimental API for marker annotation with the given fully qualified name
  -Xverbose-phases           Be verbose while performing these backend phases

Advanced options are non-standard and may be changed or removed without any notice.

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK