Exemplo n.º 1
0
        public void MavenPOM_SaveAndReload_Succeeds()
        {
            // Arrange
            string testDir  = TestUtils.CreateTestDirectory(this.TestContext);
            string filePath = Path.Combine(testDir, "pom1.txt");

            MavenPartialPOM originalPOM = new MavenPartialPOM()
            {
                ArtifactId   = "artifact.id",
                Description  = "description",
                Name         = "name",
                ModelVersion = "1.0.0",
                Packaging    = "jar"
            };

            originalPOM.Parent = new MavenCoordinate("parent.group.id", "parent.artifact.id", "1.0.0-parent");

            MavenDependency desc1 = new MavenDependency("group.id.1", "artifact.id.1", "1.0.0-desc1");
            MavenDependency desc2 = new MavenDependency("group.id.2", "artifact.id.2", "1.0.0-desc2");

            originalPOM.Dependencies.Add(desc1);
            originalPOM.Dependencies.Add(desc2);

            MavenCoordinate exclusion1 = new MavenCoordinate("ex-group", "ex-artifact", "1.0.0-ex");

            desc1.Exclusions.Add(exclusion1);

            originalPOM.Save(filePath);
            Assert.IsTrue(File.Exists(filePath), "File was not created: {0}", filePath);
            this.TestContext.AddResultFile(filePath);

            // Act
            MavenPartialPOM reloadedPOM = MavenPartialPOM.Load(filePath);

            // Assert
            Assert.IsNotNull(reloadedPOM, "Reloaded object should not be null");
            AssertExpectedDescriptor(reloadedPOM.Parent, "parent.group.id", "parent.artifact.id", "1.0.0-parent");

            Assert.IsNotNull(reloadedPOM.Dependencies, "Failed to reload the dependencies");
            Assert.AreEqual(2, reloadedPOM.Dependencies.Count);
            AssertExpectedDescriptor(reloadedPOM.Dependencies[0], "group.id.1", "artifact.id.1", "1.0.0-desc1");
            AssertExpectedDescriptor(reloadedPOM.Dependencies[1], "group.id.2", "artifact.id.2", "1.0.0-desc2");

            Assert.IsNotNull(reloadedPOM.Dependencies[0].Exclusions, "Exclusions were not reloaded successfully");
            AssertExpectedDescriptor(reloadedPOM.Dependencies[0].Exclusions.FirstOrDefault(), "ex-group", "ex-artifact", "1.0.0-ex");
        }
Exemplo n.º 2
0
        public static IReadOnlyList <string> Create(MavenGeneratorViewModel model)
        {
            MavenBuilder builder = new MavenBuilder
            {
                GroupId    = model.GroupId,
                ArtifactId = model.ArtifactId,
                Version    = model.Version,
                Packaging  = "jar"
            };

            builder.AddDefaults();

            MavenProperties properties = new MavenProperties();

            properties.AddProperty(new MavenProperty("java.version", model.JavaVersion));
            if (model.MainClass != null)
            {
                properties.AddProperty(new MavenProperty("main.class", model.MainClass));
            }

            if (model.DeployUrl != null)
            {
                MavenDistributionManagement distributionManagement = new MavenDistributionManagement();
                MavenRepository             repository             = new MavenRepository
                {
                    Id  = "deploy-id",
                    Url = model.DeployUrl
                };

                distributionManagement.AddRepository(repository);
                builder.PushElement(distributionManagement);
            }

            properties.AddProperty(new MavenProperty("project.build.sourceEncoding", "UTF-8"));

            MavenBuild        build        = new MavenBuild();
            MavenRepositories repositories = new MavenRepositories();
            MavenDependencies dependencies = new MavenDependencies();
            MavenPlugins      plugins      = new MavenPlugins();

            if (model.Language == Language.Kotlin)
            {
                build.AddElement(new MavenProperty("sourceDirectory", "src/main/kotlin"));

                properties.AddProperty(new MavenProperty("kotlin.version", "1.2.41"));
                // Enables experimental kotlin compiler
                properties.AddProperty(new MavenProperty("kotlin.compiler.incremental", "true"));

                MavenDependency kotlinDependency = new MavenDependency
                {
                    GroupId    = "org.jetbrains.kotlin",
                    ArtifactId = "kotlin-stdlib",
                    Version    = "${kotlin.version}",
                    Scope      = Maven.Data.Scope.Compile
                };
                dependencies.AddDependency(kotlinDependency);

                MavenPlugin kotlinPlugin = new MavenPlugin
                {
                    GroupId    = "org.jetbrains.kotlin",
                    ArtifactId = "kotlin-maven-plugin",
                    Version    = "${kotlin.version}"
                };
                CustomElement configuration = new CustomElement(3);
                configuration.AddLine("<executions>");
                configuration.AddLine(2, "<execution>");
                configuration.AddLine(3, "<id>compile</id>");
                configuration.AddLine(3, "<goals><goal>compile</goal></goals>");
                configuration.AddLine(3, "<configuration>");
                configuration.AddLine(4, "<sourceDirs>");
                configuration.AddLine(5, "<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>");
                configuration.AddLine(5, "<sourceDir>${project.basedir}/src/main/java</sourceDir>");
                configuration.AddLine(4, "</sourceDirs>");
                configuration.AddLine(3, "</configuration>");
                configuration.AddLine(2, "</execution>");
                configuration.AddLine("</executions>");
                kotlinPlugin.AddCustomElement(configuration);

                plugins.AddPlugin(kotlinPlugin);
            }

            if (model.IsBukkitPlugin)
            {
                properties.AddProperty(new MavenProperty("bukkit.version", "1.12.2-R0.1-SNAPSHOT"));

                MavenRepository bukkitRepository = new MavenRepository()
                {
                    Id  = "bukkit-repo",
                    Url = "https://hub.spigotmc.org/nexus/content/groups/public/"
                };
                repositories.AddRepository(bukkitRepository);

                MavenDependency bukkitDependency = new MavenDependency
                {
                    GroupId    = "org.bukkit",
                    ArtifactId = "bukkit",
                    Version    = "${bukkit.version}",
                    Scope      = Maven.Data.Scope.Provided
                };
                dependencies.AddDependency(bukkitDependency);
            }
            builder.PushElement(properties);
            builder.PushElement(repositories);
            if (model.IsBukkitPlugin)
            {
                builder.PushElement(dependencies);
            }

            foreach (Plugin plugin in model.Plugins)
            {
                switch (plugin)
                {
                case Plugin.Compiler:
                {
                    MavenPlugin compilerPlugin = new MavenPlugin
                    {
                        GroupId    = "org.apache.maven.plugins",
                        ArtifactId = "maven-compiler-plugin",
                        Version    = "3.7.0"
                    };
                    CustomElement configuration = new CustomElement(3);
                    configuration.AddLine("<configuration>");
                    configuration.AddLine(2, "<source>${java.version}</source>");
                    configuration.AddLine(2, "<target>${java.version}</target>");
                    configuration.AddLine("</configuration>");
                    compilerPlugin.AddCustomElement(configuration);

                    if (model.Language == Language.Kotlin)
                    {
                        CustomElement executions = new CustomElement(3);
                        executions.AddLine("<executions>");
                        executions.AddLine(2, "<execution>");
                        executions.AddLine(3, "<id>default-compile</id>");
                        executions.AddLine(3, "<phase>none</phase>");
                        executions.AddLine(2, "</execution>");
                        executions.AddLine("</executions>");

                        executions.AddLine("<executions>");
                        executions.AddLine(2, "<execution>");
                        executions.AddLine(3, "<id>java-compile</id>");
                        executions.AddLine(3, "<phase>compile</phase>");
                        executions.AddLine(3, "<goals>");
                        executions.AddLine(4, "<goal>compile</goal>");
                        executions.AddLine(3, "</goals>");
                        executions.AddLine(2, "</execution>");
                        executions.AddLine("</executions>");

                        compilerPlugin.AddCustomElement(executions);
                    }
                    plugins.AddPlugin(compilerPlugin);
                    break;
                }

                case Plugin.Shade: {
                    MavenPlugin shadePlugin = new MavenPlugin
                    {
                        GroupId    = "org.apache.maven.plugins",
                        ArtifactId = "maven-shade-plugin",
                        Version    = "3.1.1"
                    };

                    CustomElement executions = new CustomElement(3);
                    executions.AddLine("<executions>");
                    executions.AddLine(2, "<execution>");
                    executions.AddLine(3, "<phase>package</phase>");
                    executions.AddLine(3, "<goals>");
                    executions.AddLine(4, "<goal>shade</goal>");
                    executions.AddLine(3, "</goals>");
                    executions.AddLine(2, "</execution>");
                    executions.AddLine("</executions>");
                    shadePlugin.AddCustomElement(executions);
                    plugins.AddPlugin(shadePlugin);
                    break;
                }

                case Plugin.Jar:
                {
                    MavenPlugin jarPlugin = new MavenPlugin
                    {
                        GroupId    = "org.apache.maven.plugins",
                        ArtifactId = "maven-jar-plugin",
                        Version    = "3.1.0"
                    };

                    if (model.MainClass != null)
                    {
                        CustomElement configuration = new CustomElement(3);
                        configuration.AddLine("<configuration>");
                        configuration.AddLine(2, "<archive>");
                        configuration.AddLine(3, "<manifest>");
                        configuration.AddLine(4, "<addClasspath>true</addClasspath>");
                        configuration.AddLine(4, "<mainClass>${main.class}</mainClass>");
                        configuration.AddLine(3, "</manifest>");
                        configuration.AddLine(2, "</archive>");
                        configuration.AddLine("</configuration>");
                        jarPlugin.AddCustomElement(configuration);
                    }
                    plugins.AddPlugin(jarPlugin);
                    break;
                }

                case Plugin.Assembly:
                {
                    MavenPlugin jarPlugin = new MavenPlugin
                    {
                        GroupId    = "org.apache.maven.plugins",
                        ArtifactId = "maven-assembly-plugin",
                        Version    = "3.1.0"
                    };
                    CustomElement configuration = new CustomElement(3);
                    configuration.AddLine("<configuration>");
                    if (model.MainClass != null)
                    {
                        configuration.AddLine(2, "<archive>");
                        configuration.AddLine(3, "<manifest>");
                        configuration.AddLine(4, "<addClasspath>true</addClasspath>");
                        configuration.AddLine(4, "<mainClass>${main.class}</mainClass>");
                        configuration.AddLine(3, "</manifest>");
                        configuration.AddLine(2, "</archive>");
                    }
                    configuration.AddLine(2, "<descriptorRefs>");
                    configuration.AddLine(3, "<descriptorRef>jar-with-dependencies</descriptorRef>");
                    configuration.AddLine(2, "</descriptorRefs>");
                    configuration.AddLine("</configuration>");

                    jarPlugin.AddCustomElement(configuration);
                    plugins.AddPlugin(jarPlugin);
                    break;
                }
                }
            }

            build.AddElement(plugins);

            MavenResources resources = new MavenResources();
            MavenResource  resource  = new MavenResource(); // Default: src/main/resources

            resources.AddResource(resource);
            build.AddElement(resources);

            builder.PushElement(build);

            return(builder.GetGeneratedLines());
        }