package io.takari.maven.plugins.install_deploy; import static io.takari.maven.testing.TestMavenRuntime.newParameter; import static io.takari.maven.testing.TestResources.create; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.apache.maven.execution.DefaultMavenExecutionRequest; import org.apache.maven.execution.DefaultMavenExecutionResult; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenExecutionResult; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuilder; import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.repository.LocalRepository; import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import io.takari.incrementalbuild.maven.testing.IncrementalBuildRule; import io.takari.maven.testing.TestResources; public class InstallDeployTest { @Rule public final TestResources resources = new TestResources(); @Rule public final IncrementalBuildRule mojos = new IncrementalBuildRule(); @Test public void testBasic_release() throws Exception { File basedir = resources.getBasedir("install-deploy/basic"); create(basedir, "target/classes/resource.txt", "target/test-classes/resource.txt"); File localrepo = new File(basedir, "target/localrepo"); Assert.assertTrue(localrepo.mkdirs()); File remoterepo = new File(basedir, "target/remoterepo"); Assert.assertTrue(remoterepo.mkdirs()); Properties properties = new Properties(); properties.put("version", "1.0"); properties.put("repopath", remoterepo.getCanonicalPath()); MavenProject project = readMavenProject(basedir, properties); MavenSession session = newSession(project, localrepo, null); mojos.executeMojo(session, project, "jar", newParameter("sourceJar", "true"), newParameter("testJar", "true")); Assert.assertEquals(2, project.getAttachedArtifacts().size()); mojos.executeMojo(session, project, "install"); Assert.assertTrue(new File(localrepo, "io/takari/lifecycle/its/test/1.0/test-1.0.jar").canRead()); Assert.assertTrue(new File(localrepo, "io/takari/lifecycle/its/test/1.0/test-1.0.pom").canRead()); Assert.assertTrue(new File(localrepo, "io/takari/lifecycle/its/test/1.0/test-1.0-sources.jar").canRead()); Assert.assertTrue(new File(localrepo, "io/takari/lifecycle/its/test/1.0/test-1.0-tests.jar").canRead()); mojos.executeMojo(session, project, "deploy"); Assert.assertTrue(new File(remoterepo, "io/takari/lifecycle/its/test/1.0/test-1.0.jar").canRead()); Assert.assertTrue(new File(remoterepo, "io/takari/lifecycle/its/test/1.0/test-1.0.pom").canRead()); Assert.assertTrue(new File(remoterepo, "io/takari/lifecycle/its/test/1.0/test-1.0-sources.jar").canRead()); Assert.assertTrue(new File(remoterepo, "io/takari/lifecycle/its/test/1.0/test-1.0-tests.jar").canRead()); } private MavenSession newSession(MavenProject project, File localrepo, Properties properties) throws Exception { MavenExecutionRequest request = new DefaultMavenExecutionRequest(); MavenExecutionResult result = new DefaultMavenExecutionResult(); DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession(); LocalRepository localRepo = new LocalRepository(localrepo); repoSession.setLocalRepositoryManager(mojos.getContainer().lookup(LocalRepositoryManagerFactory.class, "simple").newInstance(repoSession, localRepo)); MavenSession session = new MavenSession(mojos.getContainer(), repoSession, request, result); List<MavenProject> projects = new ArrayList<>(); projects.add(project); for (String module : project.getModules()) { MavenProject moduleProject = readMavenProject(new File(project.getBasedir(), module), properties); moduleProject.setParent(project); projects.add(moduleProject); } session.setProjects(projects); return session; } private MavenProject readMavenProject(File basedir, Properties properties) throws Exception { File pom = new File(basedir, "pom.xml"); MavenExecutionRequest request = new DefaultMavenExecutionRequest(); request.setUserProperties(properties); request.setBaseDirectory(basedir); ProjectBuildingRequest configuration = request.getProjectBuildingRequest(); configuration.setRepositorySession(new DefaultRepositorySystemSession()); MavenProject project = mojos.lookup(ProjectBuilder.class).build(pom, configuration).getProject(); Assert.assertNotNull(project); return project; } @Test public void testAltDeployRepository() throws Exception { File basedir = resources.getBasedir("install-deploy/basic"); create(basedir, "target/classes/resource.txt", "target/test-classes/resource.txt"); File localrepo = new File(basedir, "target/localrepo"); Assert.assertTrue(localrepo.mkdirs()); File remoterepo = new File(basedir, "target/remoterepo"); Assert.assertTrue(remoterepo.mkdirs()); Properties properties = new Properties(); properties.put("version", "1.0"); properties.put("repopath", remoterepo.getCanonicalPath()); MavenProject project = readMavenProject(basedir, properties); MavenSession session = newSession(project, localrepo, null); mojos.executeMojo(session, project, "jar", newParameter("sourceJar", "true"), newParameter("testJar", "true")); Assert.assertEquals(2, project.getAttachedArtifacts().size()); File altDeploymentRepository = new File(basedir, "target/altremoterepo"); mojos.executeMojo(session, project, "deploy", newParameter("altDeploymentRepository", "default::default::file://" + altDeploymentRepository.getAbsolutePath())); Assert.assertTrue(new File(altDeploymentRepository, "io/takari/lifecycle/its/test/1.0/test-1.0.jar").canRead()); Assert.assertTrue(new File(altDeploymentRepository, "io/takari/lifecycle/its/test/1.0/test-1.0.pom").canRead()); Assert.assertTrue(new File(altDeploymentRepository, "io/takari/lifecycle/its/test/1.0/test-1.0-sources.jar").canRead()); Assert.assertTrue(new File(altDeploymentRepository, "io/takari/lifecycle/its/test/1.0/test-1.0-tests.jar").canRead()); } @Test public void testDeployAtEnd() throws Exception { File basedir = resources.getBasedir("install-deploy/deploy-at-end"); File localrepo = new File(basedir, "target/localrepo"); Assert.assertTrue(localrepo.mkdirs()); File remoterepo = new File(basedir, "target/remoterepo"); Assert.assertTrue(remoterepo.mkdirs()); Properties properties = new Properties(); properties.put("version", "1.0"); properties.put("repopath", remoterepo.getCanonicalPath()); MavenProject project = readMavenProject(basedir, properties); MavenSession session = newSession(project, localrepo, properties); DeployParticipant deployParticipant = mojos.getContainer().lookup(DeployParticipant.class); Assert.assertEquals(0, deployParticipant.getDeployAtEndRequests().size()); for (MavenProject reactorProject : session.getProjects()) { session.setCurrentProject(reactorProject); if (!reactorProject.getPackaging().equals("pom")) { mojos.executeMojo(session, reactorProject, "compile"); mojos.executeMojo(session, reactorProject, "jar"); } mojos.executeMojo(session, reactorProject, "deploy"); } Assert.assertFalse(new File(remoterepo, "io/takari/lifecycle/its/test/1.0/test-1.0.pom").canRead()); Assert.assertFalse(new File(remoterepo, "io/takari/lifecycle/its/test-modulea/1.0/test-modulea-1.0.jar").canRead()); Assert.assertFalse(new File(remoterepo, "io/takari/lifecycle/its/test-modulea/1.0/test-modulea-1.0.pom").canRead()); Assert.assertFalse(new File(remoterepo, "io/takari/lifecycle/its/test-moduleb/1.0/test-moduleb-1.0.jar").canRead()); Assert.assertFalse(new File(remoterepo, "io/takari/lifecycle/its/test-moduleb/1.0/test-moduleb-1.0.pom").canRead()); Assert.assertEquals(3, deployParticipant.getDeployAtEndRequests().size()); } }