@@ -120,30 +120,65 @@ object Build {
120
120
case Sources .InMemory (_, _, _, Some (wrapperParams)) =>
121
121
wrapperParams.mainClass
122
122
}
123
-
124
- val filteredMainClasses =
123
+ .filter(mainClasses.contains(_))
124
+ val rawInputInferredMainClasses =
125
125
mainClasses
126
126
.filterNot(scriptInferredMainClasses.contains(_))
127
127
.filterNot(mainClassesFoundOnExtraClasspath.contains(_))
128
128
.filterNot(mainClassesFoundInUserExtraDependencies.contains(_))
129
- if filteredMainClasses.length == 1 then {
130
- val pickedMainClass = filteredMainClasses.head
131
- if (scriptInferredMainClasses.nonEmpty) {
132
- val firstScript = scriptInferredMainClasses.head
133
- val scriptsString = scriptInferredMainClasses.mkString(" , " )
129
+ val extraClasspathInferredMainClasses =
130
+ mainClassesFoundOnExtraClasspath.filter(mainClasses.contains(_))
131
+ val userExtraDependenciesInferredMainClasses =
132
+ mainClassesFoundInUserExtraDependencies.filter(mainClasses.contains(_))
133
+
134
+ def logMessageOnLesserPriorityMainClasses (
135
+ pickedMainClass : String ,
136
+ mainClassDescriptor : String ,
137
+ lesserPriorityMainClasses : Seq [String ]
138
+ ): Unit =
139
+ if lesserPriorityMainClasses.nonEmpty then {
140
+ val first = lesserPriorityMainClasses.head
141
+ val completeString = lesserPriorityMainClasses.mkString(" , " )
134
142
logger.message(
135
- s " Running $pickedMainClass. Also detected script main classes: $scriptsString"
143
+ s """ Running $pickedMainClass. Also detected $mainClassDescriptor: $completeString
144
+ |You can run any one of them by passing option --main-class, i.e. --main-class $first
145
+ |All available main classes can always be listed by passing option --list-main-classes """ .stripMargin
136
146
)
137
- logger.message(
138
- s " You can run any one of them by passing option --main-class, i.e. --main-class $firstScript"
147
+ }
148
+
149
+ (
150
+ rawInputInferredMainClasses,
151
+ scriptInferredMainClasses,
152
+ extraClasspathInferredMainClasses,
153
+ userExtraDependenciesInferredMainClasses
154
+ ) match {
155
+ case (Seq (pickedMainClass), scriptInferredMainClasses, _, _) =>
156
+ logMessageOnLesserPriorityMainClasses(
157
+ pickedMainClass = pickedMainClass,
158
+ mainClassDescriptor = " script main classes" ,
159
+ lesserPriorityMainClasses = scriptInferredMainClasses
139
160
)
140
- logger.message(
141
- " All available main classes can always be listed by passing option --list-main-classes"
161
+ Right (pickedMainClass)
162
+ case (rawMcs, scriptMcs, extraCpMcs, userExtraDepsMcs) if rawMcs.length > 1 =>
163
+ Left (rawMcs ++ scriptMcs ++ extraCpMcs ++ userExtraDepsMcs)
164
+ case (Nil , Seq (pickedMainClass), _, _) => Right (pickedMainClass)
165
+ case (Nil , scriptMcs, extraCpMcs, userExtraDepsMcs) if scriptMcs.length > 1 =>
166
+ Left (scriptMcs ++ extraCpMcs ++ userExtraDepsMcs)
167
+ case (Nil , Nil , Seq (pickedMainClass), userExtraDepsMcs) =>
168
+ logMessageOnLesserPriorityMainClasses(
169
+ pickedMainClass = pickedMainClass,
170
+ mainClassDescriptor = " other main classes in dependencies" ,
171
+ lesserPriorityMainClasses = userExtraDepsMcs
142
172
)
143
- }
144
- Right (pickedMainClass)
173
+ Right (pickedMainClass)
174
+ case (Nil , Nil , extraCpMcs, userExtraDepsMcs) if extraCpMcs.length > 1 =>
175
+ Left (extraCpMcs ++ userExtraDepsMcs)
176
+ case (Nil , Nil , Nil , Seq (pickedMainClass)) => Right (pickedMainClass)
177
+ case (Nil , Nil , Nil , userExtraDepsMcs) if userExtraDepsMcs.length > 1 =>
178
+ Left (userExtraDepsMcs)
179
+ case (rawMcs, scriptMcs, extraCpMcs, userExtraDepsMcs) =>
180
+ Left (rawMcs ++ scriptMcs ++ extraCpMcs ++ userExtraDepsMcs)
145
181
}
146
- else Left (mainClasses)
147
182
}
148
183
def retainedMainClassOpt (
149
184
mainClasses : Seq [String ],
0 commit comments