Skip to content

Commit be63eb8

Browse files
committed
Fix module dependencies was not correctly handled when prepare staging directory, fixes #7063
1 parent 8a344f7 commit be63eb8

File tree

1 file changed

+30
-4
lines changed
  • PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice-java/src/main/java/com/microsoft/azure/toolkit/intellij/legacy/function/runner/core

1 file changed

+30
-4
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice-java/src/main/java/com/microsoft/azure/toolkit/intellij/legacy/function/runner/core/FunctionUtils.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import com.intellij.openapi.module.ModuleManager;
1515
import com.intellij.openapi.project.Project;
1616
import com.intellij.openapi.roots.CompilerModuleExtension;
17+
import com.intellij.openapi.roots.LibraryOrderEntry;
18+
import com.intellij.openapi.roots.ModuleOrderEntry;
1719
import com.intellij.openapi.roots.OrderEnumerator;
1820
import com.intellij.openapi.roots.OrderRootType;
1921
import com.intellij.openapi.roots.libraries.Library;
@@ -27,6 +29,8 @@
2729
import com.intellij.psi.search.GlobalSearchScope;
2830
import com.intellij.psi.search.searches.AnnotatedElementsSearch;
2931
import com.intellij.util.containers.ContainerUtil;
32+
import com.intellij.workspaceModel.ide.impl.legacyBridge.module.roots.ModuleOrderEntryBridge;
33+
import com.microsoft.azure.toolkit.intellij.common.AzureArtifactManager;
3034
import com.microsoft.azure.toolkit.intellij.common.AzureBundle;
3135
import com.microsoft.azure.toolkit.lib.Azure;
3236
import com.microsoft.azure.toolkit.lib.AzureConfiguration;
@@ -68,6 +72,8 @@
6872
import java.util.LinkedHashMap;
6973
import java.util.List;
7074
import java.util.Map;
75+
import java.util.Objects;
76+
import java.util.Optional;
7177
import java.util.concurrent.Callable;
7278
import java.util.regex.Matcher;
7379
import java.util.regex.Pattern;
@@ -289,10 +295,14 @@ public static Map<String, FunctionConfiguration> prepareStagingFolder(Path stagi
289295
if (gradleProject.isValid()) {
290296
gradleProject.getDependencies().forEach(lib -> dependencies.add(lib));
291297
} else {
292-
OrderEnumerator.orderEntries(module).productionOnly().forEachLibrary(lib -> {
293-
Arrays.stream(lib.getFiles(OrderRootType.CLASSES)).map(virtualFile -> new File(stripExtraCharacters(virtualFile.getPath())))
294-
.filter(File::exists)
295-
.forEach(dependencies::add);
298+
OrderEnumerator.orderEntries(module).productionOnly().forEach(lib -> {
299+
if (lib instanceof ModuleOrderEntry) {
300+
Optional.ofNullable(getArtifactFromModule(((ModuleOrderEntry) lib).getModule())).ifPresent(dependencies::add);
301+
} else if (lib instanceof LibraryOrderEntry) {
302+
Arrays.stream(lib.getFiles(OrderRootType.CLASSES)).map(virtualFile -> new File(stripExtraCharacters(virtualFile.getPath())))
303+
.filter(File::exists)
304+
.forEach(dependencies::add);
305+
}
296306
return true;
297307
});
298308
}
@@ -304,12 +314,28 @@ public static Map<String, FunctionConfiguration> prepareStagingFolder(Path stagi
304314
final File libFolder = new File(stagingFolder.toFile(), "lib");
305315
for (final File file : dependencies) {
306316
if (!StringUtils.equalsIgnoreCase(getArtifactIdFromFile(file), libraryToExclude)) {
317+
if (!file.exists()) {
318+
throw new AzureToolkitRuntimeException(String.format("Dependency artifact (%s) not found, please correct the dependency and try again", file.getAbsolutePath()));
319+
}
307320
FileUtils.copyFileToDirectory(file, libFolder);
308321
}
309322
}
310323
return configMap;
311324
}
312325

326+
// get artifact based on module
327+
@Nullable
328+
private static File getArtifactFromModule(final Module module) {
329+
final Project project = module.getProject();
330+
final AzureArtifactManager artifactManager = AzureArtifactManager.getInstance(project);
331+
return artifactManager.getAllSupportedAzureArtifacts().stream()
332+
.filter(artifact -> Objects.equals(artifactManager.getModuleFromAzureArtifact(artifact), module))
333+
.findFirst()
334+
.map(azureArtifact -> artifactManager.getFileForDeployment(azureArtifact))
335+
.map(File::new)
336+
.orElse(null);
337+
}
338+
313339
private static String getArtifactIdFromFile(@Nonnull final File file) {
314340
final Matcher matcher = ARTIFACT_NAME_PATTERN.matcher(file.getName());
315341
return matcher.matches() ? StringUtils.substringBeforeLast(file.getName(), "-") :

0 commit comments

Comments
 (0)