[
https://issues.apache.org/jira/browse/JS2-1291?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14071248#comment-14071248
]
Mansour Al Akeel commented on JS2-1291:
---------------------------------------
The build can be simplified, if we start with the custom maven plugins. We can
start cleaning them, and replace them with out-of-the-box maven plugins.
For example, looking at the generated war archetype, we have:
<plugin>
<groupId>org.apache.portals.jetspeed-2</groupId>
<artifactId>jetspeed-unpack-maven-plugin</artifactId>
<version>${org.apache.portals.jetspeed.version}</version>
<executions>
<execution>
<id>unpack-jetspeed-properties</id>
<goals>
<goal>unpack</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<unpack>
<artifact>org.apache.portals.jetspeed-2:jetspeed-portal-resources:jar</artifact>
<targetDirectory>${project.build.directory}/${project.build.finalName}</targetDirectory>
<resources>
<resource>
<path>conf/jetspeed</path>
<include>jetspeed.properties</include>
<destination>WEB-INF/conf</destination>
</resource>
</resources>
</unpack>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.portals.jetspeed-2</groupId>
<artifactId>jetspeed-portal-resources</artifactId>
<version>${org.apache.portals.jetspeed.version}</version>
</dependency>
</dependencies>
</plugin>
This snippet AFAIK, extracts the configuration for JS2 into the WAR. I have
replaced this with a call to antrun:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>extract-config</id>
<phase>process-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<property
name="js2.resources.jar"
value="${org.apache.portals.jetspeed-2:jetspeed-portal-resources:jar}" />
<unzip
src="${js2.resources.jar}" dest="${project.build.outputDirectory}/WEB-INF/conf">
<patternset>
<include name="conf/jetspeed/jetspeed.properties" />
</patternset>
<mapper
type="flatten" />
</unzip>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
However, honestly, I don't see why we need these configuration in a separate
jar (maven artifact) in the first place. We can just put these config in the JS
war, and allow others to override/delete through the overlay mechanism.
Another example is this:
<plugin>
<groupId>org.apache.portals.jetspeed-2</groupId>
<artifactId>jetspeed-deploy-maven-plugin</artifactId>
<version>${org.apache.portals.jetspeed.version}</version>
<executions>
<execution>
<id>deploy-jetspeed-layouts</id>
<goals>
<goal>deploy</goal>
</goals>
<phase>process-resources</phase>
<configuration>
<targetBaseDir>${project.build.directory}/${project.build.finalName}</targetBaseDir>
<destinations>
<local>WEB-INF/deploy/local</local>
</destinations>
<deployments>
<deployment>
<artifact>org.apache.portals.jetspeed-2:jetspeed-layouts:war</artifact>
<destination>local</destination>
</deployment>
</deployments>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.portals.jetspeed-2</groupId>
<artifactId>jetspeed-layouts</artifactId>
<version>${org.apache.portals.jetspeed.version}</version>
<type>war</type>
</dependency>
</dependencies>
</plugin>
This custom plugin copies jetspeed-layouts to
JETSPEED_WAR/WEB-INF/deploy/local. Do we need a custom maven plugin for this ??
Here's How I am doing it:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-wars</id>
<phase>process-resources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.apache.portals.jetspeed-2</groupId>
<artifactId>j2-admin</artifactId>
<version>${org.apache.portals.jetspeed.version}</version>
<type>war</type>
<outputDirectory>${project.build.outputDirectory}/WEB-INF/deploy</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>org.apache.portals.jetspeed-2</groupId>
<artifactId>jetspeed-layouts</artifactId>
<version>${org.apache.portals.jetspeed.version}</version>
<type>war</type>
<outputDirectory>${project.build.outputDirectory}/WEB-INF/deploy/local</outputDirectory>
</artifactItem>
</artifactItems>
<stripVersion>true</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
In fact, the way I am doing it, is copying js-admin.war to the WEB-INF/deploy
directory plus the layout jar ! Without a custom maven plugin !
In the generated archetype for 2.3.0-SNAPSHOT we have this:
<plugin>
<groupId>org.apache.portals.jetspeed-2</groupId>
<artifactId>jetspeed-fileutils-maven-plugin</artifactId>
<version>${org.apache.portals.jetspeed.version}</version>
<executions>
<execution>
<id>configure-jetspeed-properties</id>
<goals>
<goal>event</goal>
</goals>
<phase>process-resources</phase>
<configuration>
<srcFilePath>${project.build.directory}/${project.build.finalName}/WEB-INF/conf/jetspeed.properties</srcFilePath>
<editPattern>^jetui.customization.method%5Cs*=.*%24</editPattern>
use %24 for '$' and %5C
for '\'
<replacePattern>jetui.customization.method%20=%20ajax</replacePattern>
use %20 for space
<event>edit</event>
</configuration>
</execution>
</executions>
</plugin>
I am not sure what it does yet. However, my guess is that it replaces some
values in a config file. Do we need a custom plugin to configure values in a
plain text file ?? We can edit these values directly, and utilize maven war
layout technique again.
While these plug-ins wont directly simplify the over all build, however, few
less things to worry about and maintain.
With regard to using profiles, I am currently doing this to generate a folder
for shared libs. It's not as clean as I want, and still to be improved
significantly. For example:
<profile>
<id>shared-libs</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>javax.portlet</groupId>
<artifactId>portlet-api</artifactId>
<version>2.0</version>
</artifactItem>
<artifactItem>
<groupId>javax.ccpp</groupId>
<artifactId>ccpp</artifactId>
<version>1.0</version>
</artifactItem>
.....
</artifactItems>
<outputDirectory>${project.build.directory}/tomcat-shared-lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
I run this, with
$ mvn clean package -P shared-libs
And the generated folder with the jar exist under target/tomcat-shared-libs.
I think, with todays available tools and technologies, we can ignore/drop the
whole installer. With JPA we can configure it to create tables automatically,
and populate them. This means we can distribute JS2 as a war file only, and
allow customization through overlay.
If we honour convention over configuration, things will start getting simpler.
> Improve Build to Take Advantage of Maven 3 Features
> ---------------------------------------------------
>
> Key: JS2-1291
> URL: https://issues.apache.org/jira/browse/JS2-1291
> Project: Jetspeed 2
> Issue Type: Improvement
> Components: Project Build
> Affects Versions: 2.3.0
> Reporter: David Sean Taylor
> Fix For: 2.3.0
>
>
> This is a general effort to simplify the Jetspeed build. For example,
> leverage new Maven-3 features like Profiles
--
This message was sent by Atlassian JIRA
(v6.2#6252)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]