Java tutorial
/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.maven.core; import com.liferay.ide.core.IBundleProject; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.core.util.FileUtil; import com.liferay.ide.maven.core.util.DefaultMaven2OsgiConverter; import com.liferay.ide.project.core.IProjectBuilder; import com.liferay.ide.project.core.util.ProjectUtil; import com.liferay.ide.server.remote.IRemoteServerPublisher; import java.io.File; import org.apache.maven.artifact.Artifact; import org.apache.maven.project.MavenProject; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.m2e.core.project.IMavenProjectFacade; /** * @author Gregory Amerson */ public class MavenBundlePluginProject extends LiferayMavenProject implements IBundleProject { private final String[] ignorePaths = new String[] { "target" }; public MavenBundlePluginProject(IProject project) { super(project); } public <T> T adapt(Class<T> adapterType) { T adapter = super.adapt(adapterType); if (adapter != null) { return adapter; } final IMavenProjectFacade facade = MavenUtil.getProjectFacade(getProject(), new NullProgressMonitor()); if (facade != null) { if (IProjectBuilder.class.equals(adapterType)) { final IProjectBuilder projectBuilder = new MavenProjectBuilder(getProject()); return adapterType.cast(projectBuilder); } else if (IRemoteServerPublisher.class.equals(adapterType)) { final IRemoteServerPublisher remoteServerPublisher = new MavenProjectRemoteServerPublisher( getProject()); return adapterType.cast(remoteServerPublisher); } else if (IBundleProject.class.equals(adapterType)) { return adapterType.cast(this); } } return null; } @Override public String getBundleShape() { return "jar"; } @Override public IFile getDescriptorFile(String name) { return getProject().getFile(name); } @Override public IPath getOutputBundle(boolean cleanBuild, IProgressMonitor monitor) throws CoreException { IPath outputJar = null; final IMavenProjectFacade projectFacade = MavenUtil.getProjectFacade(getProject(), monitor); final MavenProjectBuilder mavenProjectBuilder = new MavenProjectBuilder(this.getProject()); // IDE-3009 delete the MANIFEST.MF to ensure that it will be regenerated by bnd-process IFile manifest = this.getProject().getFile("target/classes/META-INF/MANIFEST.MF"); if (manifest.exists()) { manifest.delete(true, monitor); } if (cleanBuild || !isAutoBuild()) { this.getProject().build(IncrementalProjectBuilder.CLEAN_BUILD, monitor); this.getProject().build(IncrementalProjectBuilder.FULL_BUILD, monitor); } mavenProjectBuilder.execJarMojo(projectFacade, monitor); final MavenProject mavenProject = projectFacade.getMavenProject(monitor); final String targetName = mavenProject.getBuild().getFinalName() + ".jar"; final String buildDirectory = mavenProject.getBuild().getDirectory(); final File baseDirectory = mavenProject.getBasedir(); final IPath buildDirPath = new Path(buildDirectory); final IPath baseDirPath = new Path(baseDirectory.toString()); final IPath relativePath = buildDirPath.makeRelativeTo(baseDirPath); final IFolder targetFolder = getTargetFolder(getProject(), relativePath); if (targetFolder.exists()) { // targetFolder.refreshLocal( IResource.DEPTH_ONE, monitor ); final IPath targetFile = targetFolder.getRawLocation().append(targetName); if (targetFile.toFile().exists()) { outputJar = targetFile; } } return outputJar; } private boolean isAutoBuild() { return ResourcesPlugin.getWorkspace().getDescription().isAutoBuilding(); } private IFolder getTargetFolder(IProject project, IPath relativePath) { IFolder targetFolder = project.getFolder(relativePath); if (!targetFolder.exists()) { targetFolder = project.getFolder("target"); } return targetFolder; } @Override public String getSymbolicName() throws CoreException { String bsn = ProjectUtil.getBundleSymbolicNameFromBND(getProject()); if (!CoreUtil.empty(bsn)) { return bsn; } String retval = null; final IProgressMonitor monitor = new NullProgressMonitor(); final IMavenProjectFacade projectFacade = MavenUtil.getProjectFacade(getProject(), monitor); final MavenProject mavenProject = projectFacade.getMavenProject(monitor); final Artifact artifact = mavenProject.getArtifact(); final File file = artifact.getFile(); if (file != null && file.exists() && !artifact.getFile().getName().equals("classes")) { retval = new DefaultMaven2OsgiConverter().getBundleSymbolicName(artifact); } else { // fallback to project name retval = getProject().getLocation().lastSegment(); } return retval; } @Override public boolean filterResource(IPath resourcePath) { if (filterResource(resourcePath, ignorePaths)) { return true; } return false; } @Override public boolean isFragmentBundle() { final IFile bndFile = getProject().getFile("bnd.bnd"); if (bndFile.exists()) { try { String content = FileUtil.readContents(bndFile.getContents()); if (content.contains("Fragment-Host")) { return true; } } catch (Exception e) { } } return false; } }