@@ -59,13 +59,14 @@ object Build {
59
59
def outputOpt : Some [os.Path ] = Some (output)
60
60
def dependencyClassPath : Seq [os.Path ] = sources.resourceDirs ++ artifacts.classPath
61
61
def fullClassPath : Seq [os.Path ] = Seq (output) ++ dependencyClassPath
62
+ private lazy val mainClassesFoundInProject : Seq [String ] = MainClass .find(output).sorted
63
+ private lazy val mainClassesFoundOnExtraClasspath : Seq [String ] =
64
+ options.classPathOptions.extraClassPath.flatMap(MainClass .find).sorted
65
+ private lazy val mainClassesFoundInUserExtraDependencies : Seq [String ] =
66
+ artifacts.jarsForUserExtraDependencies.flatMap(MainClass .findInDependency).sorted
62
67
def foundMainClasses (): Seq [String ] = {
63
- val found =
64
- MainClass .find(output).sorted ++
65
- options.classPathOptions.extraClassPath.flatMap(MainClass .find).sorted
66
- if (inputs.isEmpty && found.isEmpty)
67
- artifacts.jarsForUserExtraDependencies.flatMap(MainClass .findInDependency).sorted
68
- else found
68
+ val found = mainClassesFoundInProject ++ mainClassesFoundOnExtraClasspath
69
+ if inputs.isEmpty && found.isEmpty then mainClassesFoundInUserExtraDependencies else found
69
70
}
70
71
def retainedMainClass (
71
72
mainClasses : Seq [String ],
@@ -119,28 +120,65 @@ object Build {
119
120
case Sources .InMemory (_, _, _, Some (wrapperParams)) =>
120
121
wrapperParams.mainClass
121
122
}
122
-
123
- val filteredMainClasses =
124
- mainClasses.filter(! scriptInferredMainClasses.contains(_))
125
- if (filteredMainClasses.length == 1 ) {
126
- val pickedMainClass = filteredMainClasses.head
127
- if (scriptInferredMainClasses.nonEmpty) {
128
- val firstScript = scriptInferredMainClasses.head
129
- val scriptsString = scriptInferredMainClasses.mkString(" , " )
123
+ .filter(mainClasses.contains(_))
124
+ val rawInputInferredMainClasses =
125
+ mainClasses
126
+ .filterNot(scriptInferredMainClasses.contains(_))
127
+ .filterNot(mainClassesFoundOnExtraClasspath.contains(_))
128
+ .filterNot(mainClassesFoundInUserExtraDependencies.contains(_))
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(" , " )
130
142
logger.message(
131
- 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
132
146
)
133
- logger.message(
134
- 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
135
160
)
136
- logger.message(
137
- " 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
138
172
)
139
- }
140
- 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)
141
181
}
142
- else
143
- Left (mainClasses)
144
182
}
145
183
def retainedMainClassOpt (
146
184
mainClasses : Seq [String ],
0 commit comments