Moin Henrique,
thank you for the patch. Just applied it.
Merci
Uli
Am 05.04.2007 um 16:27 schrieb Henrique Prange:
> Hi Ulrich,
>
> Sorry. The zipped source files are attached. I've created another
> patch using Subversive too.
>
> Cheers,
>
> Henrique
>
> Ulrich Köster wrote:
>> Moin Henrique,
>> I'm having problems applying the patch. Please send me the
>> modified files.
>> Uli
>> Am 27.03.2007 um 03:57 schrieb Henrique Prange:
>>> Hi Andrus and Ulrich,
>>>
>>> I have corrected the following problems on maven-wolifecycle-plugin:
>>>
>>> -webobjects\apple is not considered a webobjects group (only on
>>> Windows)
>>> -Incorrect localRepository (only on Windows)
>>> -Dependencies with scope = provided is added to the final WOA
>>> (WOL-394)
>>> -Problem with localized resources (reported by Fabian)
>>>
>>> The patch is attached.
>>>
>>> I've created some tests. It would be interesting to execute them
>>> to verify if they work on Mac.
>>>
>>> Cheers,
>>>
>>> Henrique
>>>
>>> --
>>> \o/ Henrique Prange, Moleque de Idéias Educaçăo e Tecnologia Ltda
>>> | Phone: 55-21-2710-0178 E-mail: hprang..oleque.com.br
>>> / \ http://www.moleque.com.br
>>> Index: .classpath
>>> ===================================================================
>>> --- .classpath (revision 3898)
>>> +++ .classpath (working copy)
>>>.. -1,9 +1,10 @@
>>> -<?xml version="1.0" encoding="UTF-8"?>
>>> -<classpath>
>>> - <classpathentry kind="src" path="src/main/java"/>
>>> - <classpathentry kind="src" path="src/main/scripts"/>
>>> - <classpathentry kind="src" path="src/main/resources"/>
>>> - <classpathentry kind="con"
>>> path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
>>> - <classpathentry kind="con"
>>> path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
>>> - <classpathentry kind="output" path="bin"/>
>>> -</classpath>
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +<classpath>
>>> + <classpathentry kind="src" path="src/main/java"/>
>>> + <classpathentry kind="src" path="src/test/java"/>
>>> + <classpathentry kind="src" path="src/main/scripts"/>
>>> + <classpathentry kind="src" path="src/main/resources"/>
>>> + <classpathentry kind="con"
>>> path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
>>> + <classpathentry kind="con"
>>> path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
>>> + <classpathentry kind="output" path="bin"/>
>>> +</classpath>
>>> Index: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> DefineResourcesMojo.java
>>> ===================================================================
>>> --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> DefineResourcesMojo.java (revision 3898)
>>> +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> DefineResourcesMojo.java (working copy)
>>>.. -189,7 +189,7 @@
>>> if (fileName.equalsIgnoreCase
>>> ("Nonlocalized.lproj")) {
>>> resource.setTargetPath(fullTargetPath);
>>> } else {
>>> - resource.setTargetPath(fullTargetPath +
>>> File.separator + fileName.substring(0, fileName.length() - 6));
>>> + resource.setTargetPath(fullTargetPath +
>>> File.separator + fileName);
>>> }
>>> resources.add(resource);
>>> }
>>> Index: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> DefineWOApplicationResourcesMojo.java
>>> ===================================================================
>>> --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> DefineWOApplicationResourcesMojo.java (revision 3898)
>>> +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> DefineWOApplicationResourcesMojo.java (working copy)
>>>.. -18,6 +18,7 @@
>>> import java.util.jar.JarFile;
>>> import java.util.jar.JarInputStream;
>>>
>>> +import org.apache.commons.io.FilenameUtils;
>>> import org.apache.maven.artifact.Artifact;
>>> import org.apache.maven.artifact.factory.ArtifactFactory;
>>> import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
>>>.. -43,27 +44,21 @@
>>> public class DefineWOApplicationResourcesMojo extends
>>> DefineResourcesMojo {
>>>
>>> /**
>>> - * The maven project.
>>> + * Changes back slashes '\' on Windows to '/'.
>>> *
>>> - *..arameter expression="${project}"
>>> - *..equired
>>> - *..eadonly
>>> + *..aram path
>>> + * Any file path
>>> + *..eturn Returns a file path without back slashes
>>> */
>>> - private MavenProject project;
>>> -
>>> - /**
>>> - *..arameter expression="${localRepository}"
>>> - *..equired
>>> - *..eadonly
>>> - */
>>> - private ArtifactRepository localRepository;
>>> + public static String normalizedPath(String path) {
>>> + return FilenameUtils.separatorsToUnix(path);
>>> + }
>>>
>>> /**
>>> - * Read patternsets.
>>> *
>>> - *..arameter expression="readPatternsets"
>>> + *..omponent
>>> */
>>> - private Boolean readPatternsets;
>>> + private ArtifactFactory artifactFactory;
>>>
>>> /**
>>> *..omponent
>>>.. -70,11 +65,21 @@
>>> */
>>> private ArtifactResolver artifactResolver;
>>>
>>> + private String[][] dependencyPaths;
>>> +
>>> /**
>>> + * include JavaClientClasses in WebServerResources.
>>> *
>>> - *..omponent
>>> + *..arameter
>>> expression="includeJavaClientClassesInWebServerResources"
>>> */
>>> - private ArtifactFactory artifactFactory;
>>> + private Boolean includeJavaClientClassesInWebServerResources;
>>> +
>>> + /**
>>> + *..arameter expression="${localRepository}"
>>> + *..equired
>>> + *..eadonly
>>> + */
>>> + private ArtifactRepository localRepository;
>>>
>>> /**
>>> *
>>>.. -83,19 +88,26 @@
>>> private ArtifactMetadataSource metadataSource;
>>>
>>> /**
>>> + * The maven project.
>>> *
>>> - *..arameter expression="$
>>> {project.remoteArtifactRepositories}"
>>> + *..arameter expression="${project}"
>>> + *..equired
>>> + *..eadonly
>>> */
>>> - private List remoteRepositories;
>>> + private MavenProject project;
>>>
>>> - private String[][] dependencyPaths;
>>> + /**
>>> + * Read patternsets.
>>> + *
>>> + *..arameter expression="readPatternsets"
>>> + */
>>> + private Boolean readPatternsets;
>>>
>>> /**
>>> - * include JavaClientClasses in WebServerResources.
>>> *
>>> - *..arameter
>>> expression="includeJavaClientClassesInWebServerResources"
>>> + *..arameter expression="$
>>> {project.remoteArtifactRepositories}"
>>> */
>>> - private Boolean includeJavaClientClassesInWebServerResources;
>>> + private List remoteRepositories;
>>>
>>> /**
>>> * skip webobjects frameworks from apple.
>>>.. -108,54 +120,6 @@
>>> super();
>>> }
>>>
>>> - public void execute() throws MojoExecutionException,
>>> MojoFailureException {
>>> - super.execute();
>>> - try {
>>> - this.defineProperties();
>>> - this.defineClasspath();
>>> - this.executeCopyWebServerResources();
>>> - } finally {
>>> - dependencyPaths = null;
>>> - }
>>> - }
>>> -
>>> - private void executeCopyWebServerResources() throws
>>> MojoExecutionException {
>>> - getLog().info("Copy webserverresources");
>>> - String[][] classpathEntries = this.getDependencyPaths();
>>> - for (int i = 0; i < classpathEntries[1].length; i++) {
>>> - if (skipAppleProvidedFrameworks != null &&
>>> skipAppleProvidedFrameworks.booleanValue() &&
>>> this.isWebobjectAppleGroup(classpathEntries[2][i])) {
>>> - getLog().debug("Defining wo classpath:
>>> dependencyPath: " + classpathEntries[0][i] + "is in the apple
>>> group skipping");
>>> - continue;
>>> - }
>>> - FileInputStream fileInputStream;
>>> - try {
>>> - String jarFileName = localRepository.getBasedir
>>> () + File.separator + classpathEntries[0][i];
>>> - getLog().debug("Copy webserverresources: looking
>>> into jar named " + jarFileName);
>>> - fileInputStream = new FileInputStream(jarFileName);
>>> - JarInputStream jarInputStream = new
>>> JarInputStream(fileInputStream);
>>> - int counter = 0;
>>> - JarEntry jarEntry = null;
>>> - while ((jarEntry = jarInputStream.getNextJarEntry
>>> ()) != null) {
>>> - if (!jarEntry.isDirectory()) {
>>> - String jarEntryName = jarEntry.getName();
>>> - String prefix = "WebServerResources";
>>> - String frameworksFolderName =
>>> this.getProjectFolder() + "target" + File.separator +
>>> this.getProject().getArtifactId() + "-" + this.getProject
>>> ().getVersion() + ".woa" + File.separator + "Contents" +
>>> File.separator + "Frameworks" + File.separator;
>>> - if (jarEntryName != null &&
>>> jarEntryName.length() > prefix.length() && jarEntryName.startsWith
>>> (prefix)) {
>>> - File destinationFolder = new File
>>> (frameworksFolderName + classpathEntries[1][i] + ".framework");
>>> - this.copyJarEntryToFile(jarFileName,
>>> destinationFolder, jarEntry);
>>> - counter++;
>>> - }
>>> - }
>>> - }
>>> - getLog().debug("Copy webserverresources:
>>> extracted " + counter + " webserverresources from jar named " +
>>> jarFileName);
>>> - } catch (FileNotFoundException e) {
>>> - throw new MojoExecutionException("Could not open
>>> file input stream", e);
>>> - } catch (IOException e) {
>>> - throw new MojoExecutionException("Could not open
>>> jar input stream", e);
>>> - }
>>> - }
>>> - }
>>> -
>>> private void copyJarEntryToFile(String jarFileName, File
>>> destinationFolder, JarEntry jarEntry) throws IOException,
>>> FileNotFoundException {
>>> // getLog().info("Copy webserverresources: jarFileName "
>>> + jarFileName +
>>> // " destinationFolder " + destinationFolder);
>>>.. -203,21 +167,6 @@
>>> }
>>> }
>>>
>>> - private void defineProperties() throws MojoExecutionException {
>>> - String fileName = this.getProjectFolder() + "target" +
>>> File.separator + "wobuild.properties";
>>> - getLog().debug("Defining wo properties: writing to file:
>>> " + fileName);
>>> - File file = new File(fileName);
>>> - FileWriter fileWriter;
>>> - try {
>>> - fileWriter = new FileWriter(file);
>>> - fileWriter.write("maven.localRepository.baseDir = "
>>> + localRepository.getBasedir());
>>> - fileWriter.flush();
>>> - fileWriter.close();
>>> - } catch (IOException e) {
>>> - throw new MojoExecutionException("Could not write wo
>>> properties", e);
>>> - }
>>> - }
>>> -
>>> private void defineClasspath() throws MojoExecutionException {
>>> getLog().debug("Defining wo classpath: dependencies from
>>> parameter");
>>> String[][] classpathEntries = this.getDependencyPaths();
>>>.. -225,10 +174,10 @@
>>> for (int k = 0; k < 2; k++) {
>>> for (int i = 0; i < classpathEntries[0].length; i++) {
>>> getLog().debug("Defining wo classpath:
>>> dependencyPath: " + classpathEntries[0][i]);
>>> - if(k== 0 && this.isWebobjectAppleGroup
>>> (classpathEntries[2][i])) {
>>> + if (k == 0 && this.isWebobjectAppleGroup
>>> (classpathEntries[2][i])) {
>>> continue;
>>> }
>>> - if(k== 1 && !this.isWebobjectAppleGroup
>>> (classpathEntries[2][i])) {
>>> + if (k == 1 && !this.isWebobjectAppleGroup
>>> (classpathEntries[2][i])) {
>>> continue;
>>> }
>>> if (skipAppleProvidedFrameworks != null &&
>>> skipAppleProvidedFrameworks.booleanValue() &&
>>> this.isWebobjectAppleGroup(classpathEntries[2][i])) {
>>>.. -252,20 +201,67 @@
>>> }
>>> }
>>>
>>> - public MavenProject getProject() {
>>> - return project;
>>> + private void defineProperties() throws MojoExecutionException {
>>> + String fileName = this.getProjectFolder() + "target" +
>>> File.separator + "wobuild.properties";
>>> + getLog().debug("Defining wo properties: writing to file:
>>> " + fileName);
>>> + File file = new File(fileName);
>>> + FileWriter fileWriter;
>>> + try {
>>> + fileWriter = new FileWriter(file);
>>> + fileWriter.write("maven.localRepository.baseDir = "
>>> + normalizedPath(localRepository.getBasedir()));
>>> + fileWriter.flush();
>>> + fileWriter.close();
>>> + } catch (IOException e) {
>>> + throw new MojoExecutionException("Could not write wo
>>> properties", e);
>>> + }
>>> }
>>>
>>> - public String getProductExtension() {
>>> - return "woa";
>>> + public void execute() throws MojoExecutionException,
>>> MojoFailureException {
>>> + super.execute();
>>> + try {
>>> + this.defineProperties();
>>> + this.defineClasspath();
>>> + this.executeCopyWebServerResources();
>>> + } finally {
>>> + dependencyPaths = null;
>>> + }
>>> }
>>>
>>> - public boolean hasContentsFolder() {
>>> - return true;
>>> - }
>>> -
>>> - protected Boolean readPatternsets() {
>>> - return readPatternsets;
>>> + private void executeCopyWebServerResources() throws
>>> MojoExecutionException {
>>> + getLog().info("Copy webserverresources");
>>> + String[][] classpathEntries = this.getDependencyPaths();
>>> + for (int i = 0; i < classpathEntries[1].length; i++) {
>>> + if (skipAppleProvidedFrameworks != null &&
>>> skipAppleProvidedFrameworks.booleanValue() &&
>>> this.isWebobjectAppleGroup(classpathEntries[2][i])) {
>>> + getLog().debug("Defining wo classpath:
>>> dependencyPath: " + classpathEntries[0][i] + "is in the apple
>>> group skipping");
>>> + continue;
>>> + }
>>> + FileInputStream fileInputStream;
>>> + try {
>>> + String jarFileName = localRepository.getBasedir
>>> () + File.separator + classpathEntries[0][i];
>>> + getLog().debug("Copy webserverresources: looking
>>> into jar named " + jarFileName);
>>> + fileInputStream = new FileInputStream(jarFileName);
>>> + JarInputStream jarInputStream = new
>>> JarInputStream(fileInputStream);
>>> + int counter = 0;
>>> + JarEntry jarEntry = null;
>>> + while ((jarEntry = jarInputStream.getNextJarEntry
>>> ()) != null) {
>>> + if (!jarEntry.isDirectory()) {
>>> + String jarEntryName = jarEntry.getName();
>>> + String prefix = "WebServerResources";
>>> + String frameworksFolderName =
>>> this.getProjectFolder() + "target" + File.separator +
>>> this.getProject().getArtifactId() + "-" + this.getProject
>>> ().getVersion() + ".woa" + File.separator + "Contents" +
>>> File.separator + "Frameworks" + File.separator;
>>> + if (jarEntryName != null &&
>>> jarEntryName.length() > prefix.length() && jarEntryName.startsWith
>>> (prefix)) {
>>> + File destinationFolder = new File
>>> (frameworksFolderName + classpathEntries[1][i] + ".framework");
>>> + this.copyJarEntryToFile(jarFileName,
>>> destinationFolder, jarEntry);
>>> + counter++;
>>> + }
>>> + }
>>> + }
>>> + getLog().debug("Copy webserverresources:
>>> extracted " + counter + " webserverresources from jar named " +
>>> jarFileName);
>>> + } catch (FileNotFoundException e) {
>>> + throw new MojoExecutionException("Could not open
>>> file input stream", e);
>>> + } catch (IOException e) {
>>> + throw new MojoExecutionException("Could not open
>>> jar input stream", e);
>>> + }
>>> + }
>>> }
>>>
>>> private String[][] getDependencyPaths() throws
>>> MojoExecutionException {
>>>.. -291,6 +287,11 @@
>>> Iterator dependenciesIterator = artifacts.iterator();
>>> while (dependenciesIterator.hasNext()) {
>>> Artifact artifact = (Artifact)
>>> dependenciesIterator.next();
>>> +
>>> + if (Artifact.SCOPE_PROVIDED.equals
>>> (artifact.getScope())) {
>>> + continue;
>>> + }
>>> +
>>> String depenendencyGroup = artifact.getGroupId();
>>> if (depenendencyGroup != null) {
>>> depenendencyGroup = depenendencyGroup.replace
>>> ('.', File.separatorChar);
>>>.. -314,7 +315,23 @@
>>> return dependencyPaths;
>>> }
>>>
>>> + public String getProductExtension() {
>>> + return "woa";
>>> + }
>>> +
>>> + public MavenProject getProject() {
>>> + return project;
>>> + }
>>> +
>>> + public boolean hasContentsFolder() {
>>> + return true;
>>> + }
>>> +
>>> public boolean includesVersionInArtifactName() {
>>> return true;
>>> }
>>> +
>>> + protected Boolean readPatternsets() {
>>> + return readPatternsets;
>>> + }
>>> }
>>> Index: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> WOMojo.java
>>> ===================================================================
>>> --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> WOMojo.java (revision 3898)
>>> +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> WOMojo.java (working copy)
>>>.. -3,6 +3,7 @@
>>> //org.apache.maven.plugins:maven-compiler-plugin:compile
>>> import java.io.File;
>>>
>>> +import org.apache.commons.io.FilenameUtils;
>>> import org.apache.maven.plugin.AbstractMojo;
>>> import org.apache.maven.project.MavenProject;
>>>
>>>.. -14,18 +15,14 @@
>>> super();
>>> }
>>>
>>> - protected boolean isWebobjectAppleGroup(String
>>> dependencyGroup) {
>>> - boolean returnValue = false;
>>> - if (dependencyGroup != null) {
>>> - if(dependencyGroup.indexOf('.') >= 0) {
>>> - throw new IllegalStateException();
>>> - }
>>> - returnValue = dependencyGroup.equals
>>> (MAVEN_WEBOBJECTS_GROUP_ID);
>>> - }
>>> - getLog().debug("WOMojo: isWebobjectAppleGroup: " +
>>> dependencyGroup + " return value " + returnValue);
>>> - return returnValue;
>>> + private boolean containsDot(String text) {
>>> + return text.indexOf('.') >= 0;
>>> }
>>>
>>> + public abstract String getProductExtension();
>>> +
>>> + public abstract MavenProject getProject();
>>> +
>>> protected String getProjectFolder() {
>>> String projectFolder = this.getProject().getFile
>>> ().getPath().substring(0, this.getProject().getFile().getPath
>>> ().length() - 7);
>>> return projectFolder;
>>>.. -39,7 +36,21 @@
>>> return null;
>>> }
>>>
>>> - public abstract String getProductExtension();
>>> + protected boolean isWebobjectAppleGroup(String
>>> dependencyGroup) {
>>> + if (dependencyGroup == null) {
>>> + return false;
>>> + }
>>>
>>> - public abstract MavenProject getProject();
>>> + if (containsDot(dependencyGroup)) {
>>> + throw new IllegalArgumentException("Dependency group
>>> cannot contains '.' (dot).");
>>> + }
>>> +
>>> + String normalizedGroup = FilenameUtils.separatorsToUnix
>>> (dependencyGroup);
>>> +
>>> + boolean returnValue = MAVEN_WEBOBJECTS_GROUP_ID.equals
>>> (normalizedGroup);
>>> +
>>> + getLog().debug("WOMojo: isWebobjectAppleGroup: " +
>>> normalizedGroup + " return value " + returnValue);
>>> +
>>> + return returnValue;
>>> + }
>>> }
>>> Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> MockWOMojo.java
>>> ===================================================================
>>> --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> MockWOMojo.java
>>> +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> MockWOMojo.java
>>>.. -0,0 +1,25 @@
>>> +package org.objectstyle.woproject.maven2.wolifecycle;
>>> +
>>> +import org.apache.maven.plugin.MojoExecutionException;
>>> +import org.apache.maven.plugin.MojoFailureException;
>>> +import org.apache.maven.project.MavenProject;
>>> +
>>> +/**
>>> + * Only to test methods on abstract class
>>> + *
>>> + *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
>>> Prange</a>
>>> + */
>>> +public class MockWOMojo extends WOMojo {
>>> +
>>> + public String getProductExtension() {
>>> + return null;
>>> + }
>>> +
>>> + public MavenProject getProject() {
>>> + return null;
>>> + }
>>> +
>>> + public void execute() throws MojoExecutionException,
>>> MojoFailureException {
>>> + // Do nothing
>>> + }
>>> +}
>>> Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> TestDefineWOApplicationResourcesMojo.java
>>> ===================================================================
>>> --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> TestDefineWOApplicationResourcesMojo.java
>>> +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> TestDefineWOApplicationResourcesMojo.java
>>>.. -0,0 +1,13 @@
>>> +package org.objectstyle.woproject.maven2.wolifecycle;
>>> +
>>> +import junit.framework.TestCase;
>>> +
>>> +public class TestDefineWOApplicationResourcesMojo extends
>>> TestCase {
>>> + public void testNormalizedFilePath() throws Exception {
>>> + String path = "C:\\Documents and Settings\\User\\.m2\
>>> \repository";
>>> +
>>> + String result =
>>> DefineWOApplicationResourcesMojo.normalizedPath(path);
>>> +
>>> + assertEquals("C:/Documents and Settings/User/.m2/
>>> repository", result);
>>> + }
>>> +}
>>> Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> TestWOMojo.java
>>> ===================================================================
>>> --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> TestWOMojo.java
>>> +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
>>> TestWOMojo.java
>>>.. -0,0 +1,49 @@
>>> +package org.objectstyle.woproject.maven2.wolifecycle;
>>> +
>>> +import junit.framework.TestCase;
>>> +
>>> +public class TestWOMojo extends TestCase {
>>> +
>>> + protected WOMojo mojo;
>>> +
>>> + protected void setUp() throws Exception {
>>> + super.setUp();
>>> +
>>> + mojo = new MockWOMojo();
>>> + }
>>> +
>>> + public void testIsInvalidGroup() throws Exception {
>>> + String groups[] = { ".invalidgroup", "invalid.group",
>>> "invalidgroup." };
>>> +
>>> + for (int i = 0; i < groups.length; i++) {
>>> + try {
>>> + mojo.isWebobjectAppleGroup(groups[i]);
>>> +
>>> + fail("Invalid group. Should throw an
>>> IllegalArgumentException.");
>>> + } catch (IllegalArgumentException exception) {
>>> + assertEquals("Dependency group cannot contains
>>> '.' (dot).", exception.getMessage());
>>> + }
>>> + }
>>> + }
>>> +
>>> + public void testIsNotWebObjectsGroup() throws Exception {
>>> + String group = "another/group";
>>> +
>>> + assertFalse(mojo.isWebobjectAppleGroup(group));
>>> + }
>>> +
>>> + public void testIsNullGroup() throws Exception {
>>> + assertFalse(mojo.isWebobjectAppleGroup(null));
>>> + }
>>> +
>>> + public void testWebObjectsGroupIsOsIndependent() throws
>>> Exception {
>>> + String group = "webobjects/apple";
>>> +
>>> + assertTrue(mojo.isWebobjectAppleGroup(group));
>>> +
>>> + group = "webobjects\\apple";
>>> +
>>> + assertTrue(mojo.isWebobjectAppleGroup(group));
>>> + }
>>> +
>>> +}
>
> --
>
> \o/ Henrique Prange, Moleque de Idéias Educaçăo e Tecnologia Ltda
> | Phone: 55-21-2710-0178 E-mail: hprang..oleque.com.br
> / \ http://www.moleque.com.br
> Index: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
> DefineResourcesMojo.java
> ===================================================================
> --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
> DefineResourcesMojo.java (revision 3898)
> +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
> DefineResourcesMojo.java (working copy)
>.. -189,7 +189,7 @@
> if (fileName.equalsIgnoreCase("Nonlocalized.lproj")) {
> resource.setTargetPath(fullTargetPath);
> } else {
> - resource.setTargetPath(fullTargetPath + File.separator +
> fileName.substring(0, fileName.length() - 6));
> + resource.setTargetPath(fullTargetPath + File.separator +
> fileName);
> }
> resources.add(resource);
> }
> Index: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
> DefineWOApplicationResourcesMojo.java
> ===================================================================
> --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
> DefineWOApplicationResourcesMojo.java (revision 3898)
> +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
> DefineWOApplicationResourcesMojo.java (working copy)
>.. -18,6 +18,7 @@
> import java.util.jar.JarFile;
> import java.util.jar.JarInputStream;
>
> +import org.apache.commons.io.FilenameUtils;
> import org.apache.maven.artifact.Artifact;
> import org.apache.maven.artifact.factory.ArtifactFactory;
> import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
>.. -43,27 +44,21 @@
> public class DefineWOApplicationResourcesMojo extends
> DefineResourcesMojo {
>
> /**
> - * The maven project.
> + * Changes back slashes '\' on Windows to '/'.
> *
> - *..arameter expression="${project}"
> - *..equired
> - *..eadonly
> + *..aram path
> + * Any file path
> + *..eturn Returns a file path without back slashes
> */
> - private MavenProject project;
> -
> - /**
> - *..arameter expression="${localRepository}"
> - *..equired
> - *..eadonly
> - */
> - private ArtifactRepository localRepository;
> + public static String normalizedPath(String path) {
> + return FilenameUtils.separatorsToUnix(path);
> + }
>
> /**
> - * Read patternsets.
> *
> - *..arameter expression="readPatternsets"
> + *..omponent
> */
> - private Boolean readPatternsets;
> + private ArtifactFactory artifactFactory;
>
> /**
> *..omponent
>.. -70,11 +65,21 @@
> */
> private ArtifactResolver artifactResolver;
>
> + private String[][] dependencyPaths;
> +
> /**
> + * include JavaClientClasses in WebServerResources.
> *
> - *..omponent
> + *..arameter
> expression="includeJavaClientClassesInWebServerResources"
> */
> - private ArtifactFactory artifactFactory;
> + private Boolean includeJavaClientClassesInWebServerResources;
> +
> + /**
> + *..arameter expression="${localRepository}"
> + *..equired
> + *..eadonly
> + */
> + private ArtifactRepository localRepository;
>
> /**
> *
>.. -83,19 +88,26 @@
> private ArtifactMetadataSource metadataSource;
>
> /**
> + * The maven project.
> *
> - *..arameter expression="${project.remoteArtifactRepositories}"
> + *..arameter expression="${project}"
> + *..equired
> + *..eadonly
> */
> - private List remoteRepositories;
> + private MavenProject project;
>
> - private String[][] dependencyPaths;
> + /**
> + * Read patternsets.
> + *
> + *..arameter expression="readPatternsets"
> + */
> + private Boolean readPatternsets;
>
> /**
> - * include JavaClientClasses in WebServerResources.
> *
> - *..arameter
> expression="includeJavaClientClassesInWebServerResources"
> + *..arameter expression="${project.remoteArtifactRepositories}"
> */
> - private Boolean includeJavaClientClassesInWebServerResources;
> + private List remoteRepositories;
>
> /**
> * skip webobjects frameworks from apple.
>.. -108,54 +120,6 @@
> super();
> }
>
> - public void execute() throws MojoExecutionException,
> MojoFailureException {
> - super.execute();
> - try {
> - this.defineProperties();
> - this.defineClasspath();
> - this.executeCopyWebServerResources();
> - } finally {
> - dependencyPaths = null;
> - }
> - }
> -
> - private void executeCopyWebServerResources() throws
> MojoExecutionException {
> - getLog().info("Copy webserverresources");
> - String[][] classpathEntries = this.getDependencyPaths();
> - for (int i = 0; i < classpathEntries[1].length; i++) {
> - if (skipAppleProvidedFrameworks != null &&
> skipAppleProvidedFrameworks.booleanValue() &&
> this.isWebobjectAppleGroup(classpathEntries[2][i])) {
> - getLog().debug("Defining wo classpath: dependencyPath: " +
> classpathEntries[0][i] + "is in the apple group skipping");
> - continue;
> - }
> - FileInputStream fileInputStream;
> - try {
> - String jarFileName = localRepository.getBasedir() +
> File.separator + classpathEntries[0][i];
> - getLog().debug("Copy webserverresources: looking into jar
> named " + jarFileName);
> - fileInputStream = new FileInputStream(jarFileName);
> - JarInputStream jarInputStream = new JarInputStream
> (fileInputStream);
> - int counter = 0;
> - JarEntry jarEntry = null;
> - while ((jarEntry = jarInputStream.getNextJarEntry()) != null) {
> - if (!jarEntry.isDirectory()) {
> - String jarEntryName = jarEntry.getName();
> - String prefix = "WebServerResources";
> - String frameworksFolderName = this.getProjectFolder() +
> "target" + File.separator + this.getProject().getArtifactId() + "-"
> + this.getProject().getVersion() + ".woa" + File.separator +
> "Contents" + File.separator + "Frameworks" + File.separator;
> - if (jarEntryName != null && jarEntryName.length() >
> prefix.length() && jarEntryName.startsWith(prefix)) {
> - File destinationFolder = new File(frameworksFolderName +
> classpathEntries[1][i] + ".framework");
> - this.copyJarEntryToFile(jarFileName, destinationFolder,
> jarEntry);
> - counter++;
> - }
> - }
> - }
> - getLog().debug("Copy webserverresources: extracted " + counter
> + " webserverresources from jar named " + jarFileName);
> - } catch (FileNotFoundException e) {
> - throw new MojoExecutionException("Could not open file input
> stream", e);
> - } catch (IOException e) {
> - throw new MojoExecutionException("Could not open jar input
> stream", e);
> - }
> - }
> - }
> -
> private void copyJarEntryToFile(String jarFileName, File
> destinationFolder, JarEntry jarEntry) throws IOException,
> FileNotFoundException {
> // getLog().info("Copy webserverresources: jarFileName " +
> jarFileName +
> // " destinationFolder " + destinationFolder);
>.. -203,21 +167,6 @@
> }
> }
>
> - private void defineProperties() throws MojoExecutionException {
> - String fileName = this.getProjectFolder() + "target" +
> File.separator + "wobuild.properties";
> - getLog().debug("Defining wo properties: writing to file: " +
> fileName);
> - File file = new File(fileName);
> - FileWriter fileWriter;
> - try {
> - fileWriter = new FileWriter(file);
> - fileWriter.write("maven.localRepository.baseDir = " +
> localRepository.getBasedir());
> - fileWriter.flush();
> - fileWriter.close();
> - } catch (IOException e) {
> - throw new MojoExecutionException("Could not write wo
> properties", e);
> - }
> - }
> -
> private void defineClasspath() throws MojoExecutionException {
> getLog().debug("Defining wo classpath: dependencies from
> parameter");
> String[][] classpathEntries = this.getDependencyPaths();
>.. -225,10 +174,10 @@
> for (int k = 0; k < 2; k++) {
> for (int i = 0; i < classpathEntries[0].length; i++) {
> getLog().debug("Defining wo classpath: dependencyPath: " +
> classpathEntries[0][i]);
> - if(k== 0 && this.isWebobjectAppleGroup(classpathEntries[2][i])) {
> + if (k == 0 && this.isWebobjectAppleGroup(classpathEntries[2]
> [i])) {
> continue;
> }
> - if(k== 1 && !this.isWebobjectAppleGroup(classpathEntries[2]
> [i])) {
> + if (k == 1 && !this.isWebobjectAppleGroup(classpathEntries[2]
> [i])) {
> continue;
> }
> if (skipAppleProvidedFrameworks != null &&
> skipAppleProvidedFrameworks.booleanValue() &&
> this.isWebobjectAppleGroup(classpathEntries[2][i])) {
>.. -252,20 +201,67 @@
> }
> }
>
> - public MavenProject getProject() {
> - return project;
> + private void defineProperties() throws MojoExecutionException {
> + String fileName = this.getProjectFolder() + "target" +
> File.separator + "wobuild.properties";
> + getLog().debug("Defining wo properties: writing to file: " +
> fileName);
> + File file = new File(fileName);
> + FileWriter fileWriter;
> + try {
> + fileWriter = new FileWriter(file);
> + fileWriter.write("maven.localRepository.baseDir = " +
> normalizedPath(localRepository.getBasedir()));
> + fileWriter.flush();
> + fileWriter.close();
> + } catch (IOException e) {
> + throw new MojoExecutionException("Could not write wo
> properties", e);
> + }
> }
>
> - public String getProductExtension() {
> - return "woa";
> + public void execute() throws MojoExecutionException,
> MojoFailureException {
> + super.execute();
> + try {
> + this.defineProperties();
> + this.defineClasspath();
> + this.executeCopyWebServerResources();
> + } finally {
> + dependencyPaths = null;
> + }
> }
>
> - public boolean hasContentsFolder() {
> - return true;
> - }
> -
> - protected Boolean readPatternsets() {
> - return readPatternsets;
> + private void executeCopyWebServerResources() throws
> MojoExecutionException {
> + getLog().info("Copy webserverresources");
> + String[][] classpathEntries = this.getDependencyPaths();
> + for (int i = 0; i < classpathEntries[1].length; i++) {
> + if (skipAppleProvidedFrameworks != null &&
> skipAppleProvidedFrameworks.booleanValue() &&
> this.isWebobjectAppleGroup(classpathEntries[2][i])) {
> + getLog().debug("Defining wo classpath: dependencyPath: " +
> classpathEntries[0][i] + "is in the apple group skipping");
> + continue;
> + }
> + FileInputStream fileInputStream;
> + try {
> + String jarFileName = localRepository.getBasedir() +
> File.separator + classpathEntries[0][i];
> + getLog().debug("Copy webserverresources: looking into jar
> named " + jarFileName);
> + fileInputStream = new FileInputStream(jarFileName);
> + JarInputStream jarInputStream = new JarInputStream
> (fileInputStream);
> + int counter = 0;
> + JarEntry jarEntry = null;
> + while ((jarEntry = jarInputStream.getNextJarEntry()) != null) {
> + if (!jarEntry.isDirectory()) {
> + String jarEntryName = jarEntry.getName();
> + String prefix = "WebServerResources";
> + String frameworksFolderName = this.getProjectFolder() +
> "target" + File.separator + this.getProject().getArtifactId() + "-"
> + this.getProject().getVersion() + ".woa" + File.separator +
> "Contents" + File.separator + "Frameworks" + File.separator;
> + if (jarEntryName != null && jarEntryName.length() >
> prefix.length() && jarEntryName.startsWith(prefix)) {
> + File destinationFolder = new File(frameworksFolderName +
> classpathEntries[1][i] + ".framework");
> + this.copyJarEntryToFile(jarFileName, destinationFolder,
> jarEntry);
> + counter++;
> + }
> + }
> + }
> + getLog().debug("Copy webserverresources: extracted " + counter
> + " webserverresources from jar named " + jarFileName);
> + } catch (FileNotFoundException e) {
> + throw new MojoExecutionException("Could not open file input
> stream", e);
> + } catch (IOException e) {
> + throw new MojoExecutionException("Could not open jar input
> stream", e);
> + }
> + }
> }
>
> private String[][] getDependencyPaths() throws
> MojoExecutionException {
>.. -291,6 +287,11 @@
> Iterator dependenciesIterator = artifacts.iterator();
> while (dependenciesIterator.hasNext()) {
> Artifact artifact = (Artifact) dependenciesIterator.next();
> +
> + if (Artifact.SCOPE_PROVIDED.equals(artifact.getScope())) {
> + continue;
> + }
> +
> String depenendencyGroup = artifact.getGroupId();
> if (depenendencyGroup != null) {
> depenendencyGroup = depenendencyGroup.replace('.',
> File.separatorChar);
>.. -314,7 +315,23 @@
> return dependencyPaths;
> }
>
> + public String getProductExtension() {
> + return "woa";
> + }
> +
> + public MavenProject getProject() {
> + return project;
> + }
> +
> + public boolean hasContentsFolder() {
> + return true;
> + }
> +
> public boolean includesVersionInArtifactName() {
> return true;
> }
> +
> + protected Boolean readPatternsets() {
> + return readPatternsets;
> + }
> }
> Index: src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
> WOMojo.java
> ===================================================================
> --- src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
> WOMojo.java (revision 3898)
> +++ src/main/java/org/objectstyle/woproject/maven2/wolifecycle/
> WOMojo.java (working copy)
>.. -3,6 +3,7 @@
> //org.apache.maven.plugins:maven-compiler-plugin:compile
> import java.io.File;
>
> +import org.apache.commons.io.FilenameUtils;
> import org.apache.maven.plugin.AbstractMojo;
> import org.apache.maven.project.MavenProject;
>
>.. -14,18 +15,14 @@
> super();
> }
>
> - protected boolean isWebobjectAppleGroup(String dependencyGroup) {
> - boolean returnValue = false;
> - if (dependencyGroup != null) {
> - if(dependencyGroup.indexOf('.') >= 0) {
> - throw new IllegalStateException();
> - }
> - returnValue = dependencyGroup.equals(MAVEN_WEBOBJECTS_GROUP_ID);
> - }
> - getLog().debug("WOMojo: isWebobjectAppleGroup: " +
> dependencyGroup + " return value " + returnValue);
> - return returnValue;
> + private boolean containsDot(String text) {
> + return text.indexOf('.') >= 0;
> }
>
> + public abstract String getProductExtension();
> +
> + public abstract MavenProject getProject();
> +
> protected String getProjectFolder() {
> String projectFolder = this.getProject().getFile().getPath
> ().substring(0, this.getProject().getFile().getPath().length() - 7);
> return projectFolder;
>.. -39,7 +36,21 @@
> return null;
> }
>
> - public abstract String getProductExtension();
> + protected boolean isWebobjectAppleGroup(String dependencyGroup) {
> + if (dependencyGroup == null) {
> + return false;
> + }
>
> - public abstract MavenProject getProject();
> + if (containsDot(dependencyGroup)) {
> + throw new IllegalArgumentException("Dependency group cannot
> contains '.' (dot).");
> + }
> +
> + String normalizedGroup = FilenameUtils.separatorsToUnix
> (dependencyGroup);
> +
> + boolean returnValue = MAVEN_WEBOBJECTS_GROUP_ID.equals
> (normalizedGroup);
> +
> + getLog().debug("WOMojo: isWebobjectAppleGroup: " +
> normalizedGroup + " return value " + returnValue);
> +
> + return returnValue;
> + }
> }
> Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
> MockWOMojo.java
> ===================================================================
> --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
> MockWOMojo.java
> +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
> MockWOMojo.java
>.. -0,0 +1,25 @@
> +package org.objectstyle.woproject.maven2.wolifecycle;
> +
> +import org.apache.maven.plugin.MojoExecutionException;
> +import org.apache.maven.plugin.MojoFailureException;
> +import org.apache.maven.project.MavenProject;
> +
> +/**
> + * Only to test methods on abstract class
> + *
> + *..uthor <a href="mailto:hprange@moleque.com.br">Henrique
> Prange</a>
> + */
> +public class MockWOMojo extends WOMojo {
> +
> + public String getProductExtension() {
> + return null;
> + }
> +
> + public MavenProject getProject() {
> + return null;
> + }
> +
> + public void execute() throws MojoExecutionException,
> MojoFailureException {
> + // Do nothing
> + }
> +}
> Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
> TestDefineWOApplicationResourcesMojo.java
> ===================================================================
> --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
> TestDefineWOApplicationResourcesMojo.java
> +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
> TestDefineWOApplicationResourcesMojo.java
>.. -0,0 +1,13 @@
> +package org.objectstyle.woproject.maven2.wolifecycle;
> +
> +import junit.framework.TestCase;
> +
> +public class TestDefineWOApplicationResourcesMojo extends TestCase {
> + public void testNormalizedFilePath() throws Exception {
> + String path = "C:\\Documents and Settings\\User\\.m2\\repository";
> +
> + String result = DefineWOApplicationResourcesMojo.normalizedPath
> (path);
> +
> + assertEquals("C:/Documents and Settings/User/.m2/repository",
> result);
> + }
> +}
> Index: src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
> TestWOMojo.java
> ===================================================================
> --- src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
> TestWOMojo.java
> +++ src/test/java/org/objectstyle/woproject/maven2/wolifecycle/
> TestWOMojo.java
>.. -0,0 +1,49 @@
> +package org.objectstyle.woproject.maven2.wolifecycle;
> +
> +import junit.framework.TestCase;
> +
> +public class TestWOMojo extends TestCase {
> +
> + protected WOMojo mojo;
> +
> + protected void setUp() throws Exception {
> + super.setUp();
> +
> + mojo = new MockWOMojo();
> + }
> +
> + public void testIsInvalidGroup() throws Exception {
> + String groups[] = { ".invalidgroup", "invalid.group",
> "invalidgroup." };
> +
> + for (int i = 0; i < groups.length; i++) {
> + try {
> + mojo.isWebobjectAppleGroup(groups[i]);
> +
> + fail("Invalid group. Should throw an IllegalArgumentException.");
> + } catch (IllegalArgumentException exception) {
> + assertEquals("Dependency group cannot contains '.' (dot).",
> exception.getMessage());
> + }
> + }
> + }
> +
> + public void testIsNotWebObjectsGroup() throws Exception {
> + String group = "another/group";
> +
> + assertFalse(mojo.isWebobjectAppleGroup(group));
> + }
> +
> + public void testIsNullGroup() throws Exception {
> + assertFalse(mojo.isWebobjectAppleGroup(null));
> + }
> +
> + public void testWebObjectsGroupIsOsIndependent() throws Exception {
> + String group = "webobjects/apple";
> +
> + assertTrue(mojo.isWebobjectAppleGroup(group));
> +
> + group = "webobjects\\apple";
> +
> + assertTrue(mojo.isWebobjectAppleGroup(group));
> + }
> +
> +}
> <maven-wolifecycle-plugin-patch.zip>
This archive was generated by hypermail 2.0.0 : Mon Apr 09 2007 - 06:23:17 EDT