[maven-release-plugin] copy for tag maven-bundle-plugin-1.0.5
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@832334 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
675a76fbf6
commit
22c1738bc1
21 changed files with 7644 additions and 0 deletions
205
maven-plugins/tags/maven-bundle-plugin-1.0.5/LICENSE
Normal file
205
maven-plugins/tags/maven-bundle-plugin-1.0.5/LICENSE
Normal file
|
@ -0,0 +1,205 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
||||
|
6
maven-plugins/tags/maven-bundle-plugin-1.0.5/NOTICE
Normal file
6
maven-plugins/tags/maven-bundle-plugin-1.0.5/NOTICE
Normal file
|
@ -0,0 +1,6 @@
|
|||
Apache Tuscany Maven Bundle Plugin
|
||||
Copyright (c) 2005 - 2009 The Apache Software Foundation
|
||||
|
||||
This product includes software developed by
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
72
maven-plugins/tags/maven-bundle-plugin-1.0.5/README
Normal file
72
maven-plugins/tags/maven-bundle-plugin-1.0.5/README
Normal file
|
@ -0,0 +1,72 @@
|
|||
A Maven plugin used by the Tuscany SCA project that can build an OSGi bundle for a
|
||||
project's third-party dependencies, generate a directory containing OSGi bundles
|
||||
for all the project's module dependencies, and create Eclipse project files
|
||||
(.project, .classpath etc) to configure the Eclipse PDE environment for a project.
|
||||
|
||||
To build, from the top maven-bundle-plugin run maven:
|
||||
|
||||
mvn
|
||||
|
||||
or once all the dependencies have been downloaded and a succesful build run use:
|
||||
|
||||
mvn clean install -o
|
||||
|
||||
So as to avoid the Tuscany SCA project using SNAPSHOT dependencies any changes
|
||||
to this module should be released and the Tuscany SCA project updated to use
|
||||
the newly released version.
|
||||
|
||||
To release this module:
|
||||
|
||||
mvn release:prepare
|
||||
|
||||
followed by:
|
||||
|
||||
mvn release:perform
|
||||
|
||||
That will automatically create an SVN tag from the release, update the version
|
||||
numbers in the pom.xml files in the trunk and tag, and deploy the artifacts to the
|
||||
staging repository defined by the <deploy.altRepository> in your Maven settings.xml.
|
||||
While running it will prompt you for the names for the tag, release version etc.
|
||||
|
||||
Note: there seem to be issues with having empty folders in the src tree which causes
|
||||
release:prepare to fail, not sure why but deleting the empty folder fixes the
|
||||
problem. You can do "mvn release:rollback" to undo a failed release.
|
||||
|
||||
In your maven settings.xml file you must have a server defined named "apache.releases",
|
||||
and a profile named "release". For example:
|
||||
|
||||
<servers>
|
||||
...
|
||||
<server>
|
||||
<id>apache.releases</id>
|
||||
<username>antelder</username>
|
||||
<privateKey>\ant\id_dsa</privateKey>
|
||||
<passphrase>xxx</passphrase>
|
||||
<directoryPermissions>775</directoryPermissions>
|
||||
<filePermissions>664</filePermissions>
|
||||
</server>
|
||||
</servers>
|
||||
|
||||
<profiles>
|
||||
...
|
||||
<profile>
|
||||
<id>release</id>
|
||||
<properties>
|
||||
<gpg.passphrase>...</gpg.passphrase>
|
||||
<deploy.altRepository>apache.releases::default::scp://people.apache.org/home/antelder/public_html/tuscany/maven-bundle-plugin-1.0</deploy.altRepository>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
Call a vote to release the module, eg: http://apache.markmail.org/message/6jnlfxbx7uklt5nv
|
||||
|
||||
After a successful vote copy the staging artifacts to the live repository, eg:
|
||||
|
||||
cp -p -v -R maven-bundle-plugin-1.0/org/apache/tuscany/maven/plugins/ /x1/www/people.apache.org/repo/m2-ibiblio-rsync-repository/org/apache/tuscany/maven/plugins
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
40
maven-plugins/tags/maven-bundle-plugin-1.0.5/RELEASE_NOTES
Normal file
40
maven-plugins/tags/maven-bundle-plugin-1.0.5/RELEASE_NOTES
Normal file
|
@ -0,0 +1,40 @@
|
|||
Apache Tuscany Maven Bundle Plugin 1.0.5 Release Notes
|
||||
======================================================
|
||||
|
||||
- Filter out system packages in export from non-bundle jars such as xerces, xalan or saxon to avoid package conflicts.
|
||||
This now means Tuscany can be used with Apache Felix
|
||||
|
||||
Apache Tuscany Maven Bundle Plugin 1.0.4 Release Notes
|
||||
======================================================
|
||||
|
||||
- Add compile dependencies to the .classpath file if it doesn't supply any packages to the OSGi import. This maks this plugin more closer to the mvn eclipse:eclipse behavior.
|
||||
- Exclude the project itself from the resolution so that it can be built offline
|
||||
- Add support to include different versions of 3rd party jars into the distribution if it is omitted by a lower version in maven
|
||||
- Check the partial attr to decide if the bundle needs to be required
|
||||
- Don't generate Import-Package header for the 3rd party jars so that either local package is used if there are split packages
|
||||
- Add the option to generate a gateway bundle that aggregates split packages and export them
|
||||
- Fix svn:eol-style and svn:keywords properties for java/xml files
|
||||
- Add import statement for the generated MF
|
||||
- Upgrade to Equinox 3.5
|
||||
|
||||
Apache Tuscany Maven Bundle Plugin 1.0.3 Release Notes
|
||||
======================================================
|
||||
|
||||
Apache Tuscany Maven Bundle Plugin 1.0.2 Release Notes
|
||||
======================================================
|
||||
|
||||
Apache Tuscany Maven Bundle Plugin 1.0.1 Release Notes
|
||||
======================================================
|
||||
|
||||
TUSCANY-2877: Introducing a generic Eclipse-BuddyPolicy header for the bundles generated from dependent artifacts would be helpful
|
||||
TUSCANY-2876: In artifact aggrations, artifactMemebers is misspelled and may lead to error prone configurations
|
||||
TUSCANY-2873: Wrapping of non-OSGi components creates versions that may makes no-sense
|
||||
TUSCANY-2872: Maven Bundle Plugin throws NPE when a dependent non-OSGI jar has no manifest
|
||||
r747530: Use the equinox as the osgi dependency
|
||||
|
||||
|
||||
|
||||
Apache Tuscany Maven Bundle Plugin 1.0 Release Notes
|
||||
====================================================
|
||||
|
||||
Initial release
|
312
maven-plugins/tags/maven-bundle-plugin-1.0.5/pom.xml
Normal file
312
maven-plugins/tags/maven-bundle-plugin-1.0.5/pom.xml
Normal file
|
@ -0,0 +1,312 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache</groupId>
|
||||
<artifactId>apache</artifactId>
|
||||
<version>4</version>
|
||||
</parent>
|
||||
|
||||
<groupId>org.apache.tuscany.maven.plugins</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<packaging>maven-plugin</packaging>
|
||||
<name>Apache Tuscany Maven OSGi Bundle Plugin</name>
|
||||
<version>1.0.5</version>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:http://svn.apache.org/repos/asf/tuscany/maven-plugins/tags/maven-bundle-plugin-1.0.5</connection>
|
||||
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/tuscany/maven-plugins/tags/maven-bundle-plugin-1.0.5</developerConnection>
|
||||
<url>scm:svn:https://svn.apache.org/repos/asf/tuscany/maven-plugins/tags/maven-bundle-plugin-1.0.5</url>
|
||||
</scm>
|
||||
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>apache.releases</id>
|
||||
<name>Apache Release Distribution Repository</name>
|
||||
<url>scp://people.apache.org/www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>apache.snapshots</id>
|
||||
<name>Apache Development Snapshot Repository</name>
|
||||
<url>scp://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
|
||||
<uniqueVersion>false</uniqueVersion>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
|
||||
<repositories>
|
||||
<!-- Apache SNAPSHOT repository for unreleased artifacts -->
|
||||
<repository>
|
||||
<id>apache.snapshots</id>
|
||||
<name>Apache SNAPSHOT Repository</name>
|
||||
<url>http://people.apache.org/repo/m2-snapshot-repository</url>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<!-- Tuscany repository to hold artifacts that are not published in the public maven repos -->
|
||||
<repository>
|
||||
<id>tuscany.repo</id>
|
||||
<name>Tuscany Maven 2.x Repository</name>
|
||||
<url>http://svn.apache.org/repos/asf/tuscany/maven</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
<!-- Apache repository for artifacts released by Apache TLP projects -->
|
||||
<pluginRepository>
|
||||
<id>apache</id>
|
||||
<name>Apache Repository</name>
|
||||
<url>http://people.apache.org/repo/m2-ibiblio-rsync-repository</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</pluginRepository>
|
||||
|
||||
<!-- Apache SNAPSHOT repository for unreleased artifacts -->
|
||||
<pluginRepository>
|
||||
<id>apache.snapshots</id>
|
||||
<name>Apache SNAPSHOT Repository</name>
|
||||
<url>http://people.apache.org/repo/m2-snapshot-repository</url>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</pluginRepository>
|
||||
|
||||
</pluginRepositories>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>release</id>
|
||||
<build>
|
||||
<plugins>
|
||||
|
||||
<plugin>
|
||||
<inherited>true</inherited>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<configuration>
|
||||
<altDeploymentRepository>${deploy.altRepository}</altDeploymentRepository>
|
||||
<updateReleaseInfo>true</updateReleaseInfo>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<artifactId>maven-gpg-plugin</artifactId>
|
||||
<version>1.0-alpha-4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>sign</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>deploy</id>
|
||||
<build>
|
||||
<defaultGoal>deploy</defaultGoal>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>2.0.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-plugin-api</artifactId>
|
||||
<version>2.0.8</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-project</artifactId>
|
||||
<version>2.0.8</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-settings</artifactId>
|
||||
<version>2.0.8</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-artifact</artifactId>
|
||||
<version>2.0.8</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-model</artifactId>
|
||||
<version>2.0.8</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.shared</groupId>
|
||||
<artifactId>maven-dependency-tree</artifactId>
|
||||
<version>1.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse</groupId>
|
||||
<artifactId>osgi</artifactId>
|
||||
<version>3.4.0-v20080605-1900</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<defaultGoal>install</defaultGoal>
|
||||
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>.</directory>
|
||||
<targetPath>META-INF</targetPath>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>LICENSE</include>
|
||||
<include>NOTICE</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
|
||||
<pluginManagement>
|
||||
|
||||
<plugins>
|
||||
<!-- compiler plugin configuration -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.0.2</version>
|
||||
<configuration>
|
||||
<source>1.5</source>
|
||||
<target>1.5</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- jar plugin configuration -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.1</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
<Extension-Name>${project.artifactId}</Extension-Name>
|
||||
<Specification-Title>${name}</Specification-Title>
|
||||
<Specification-Vendor>The Apache Software Foundation</Specification-Vendor>
|
||||
<Specification-Version>${version}</Specification-Version>
|
||||
<Implementation-Title>${name}</Implementation-Title>
|
||||
<Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
|
||||
<Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
|
||||
<Implementation-Version>${version}</Implementation-Version>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- surefire plugin configuration -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.4.3</version>
|
||||
<configuration>
|
||||
<includes>
|
||||
<include>**/*TestCase.java</include>
|
||||
</includes>
|
||||
<reportFormat>brief</reportFormat>
|
||||
<useFile>false</useFile>
|
||||
<forkMode>once</forkMode>
|
||||
<argLine>-ea -Xmx256m</argLine>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-release-plugin</artifactId>
|
||||
<version>2.0-beta-8</version>
|
||||
<configuration>
|
||||
<tagBase>https://svn.apache.org/repos/asf/tuscany/maven-plugins/tags</tagBase>
|
||||
<useReleaseProfile>false</useReleaseProfile>
|
||||
<preparationGoals>clean install</preparationGoals>
|
||||
<goals>deploy</goals>
|
||||
<arguments>-Prelease,deploy</arguments>
|
||||
<autoVersionSubmodules>true</autoVersionSubmodules>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
|
||||
</pluginManagement>
|
||||
|
||||
</build>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.tuscany.maven.bundle.plugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
|
||||
public class ArtifactAggregation {
|
||||
private String symbolicName;
|
||||
private String version;
|
||||
private List<ArtifactMember> artifactMembers = new ArrayList<ArtifactMember>();
|
||||
private transient List<Artifact> artifacts = new ArrayList<Artifact>();
|
||||
|
||||
public List<Artifact> getArtifacts() {
|
||||
return artifacts;
|
||||
}
|
||||
|
||||
public String getSymbolicName() {
|
||||
return symbolicName;
|
||||
}
|
||||
|
||||
public void setSymbolicName(String symbolicName) {
|
||||
this.symbolicName = symbolicName;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public List<ArtifactMember> getArtifactMembers() {
|
||||
return artifactMembers;
|
||||
}
|
||||
|
||||
public void setArtifactMembers(List<ArtifactMember> artifacts) {
|
||||
this.artifactMembers = artifacts;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return symbolicName + ";version=\"" + version + "\"\n" + artifactMembers;
|
||||
}
|
||||
|
||||
public boolean matches(Artifact artifact) {
|
||||
for(ArtifactMember m: artifactMembers) {
|
||||
if(m.matches(artifact)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.apache.tuscany.maven.bundle.plugin;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class ArtifactManifest extends ArtifactMember {
|
||||
private File manifestFile;
|
||||
|
||||
public File getManifestFile() {
|
||||
return manifestFile;
|
||||
}
|
||||
|
||||
public void setManifestFile(File manifestFile) {
|
||||
this.manifestFile = manifestFile;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.tuscany.maven.bundle.plugin;
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
|
||||
public class ArtifactMember {
|
||||
private String groupId;
|
||||
private String artifactId;
|
||||
private String version;
|
||||
|
||||
public String getGroupId() {
|
||||
return groupId;
|
||||
}
|
||||
|
||||
public void setGroupId(String groupId) {
|
||||
this.groupId = groupId;
|
||||
}
|
||||
|
||||
public String getArtifactId() {
|
||||
return artifactId;
|
||||
}
|
||||
|
||||
public void setArtifactId(String artifactId) {
|
||||
this.artifactId = artifactId;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return groupId + ":" + artifactId + ":" + version;
|
||||
}
|
||||
|
||||
public boolean matches(Artifact artifact) {
|
||||
return groupId.equals(artifact.getGroupId()) && (artifactId == null || artifactId.equals("")
|
||||
|| artifactId.equals("*") || artifactId.equals(artifact.getArtifactId()))
|
||||
&& (version == null || version.equals("") || version.equals("*") || version.equals(artifact.getVersion()));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,639 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.apache.tuscany.maven.bundle.plugin;
|
||||
|
||||
import static org.osgi.framework.Constants.BUNDLE_CLASSPATH;
|
||||
import static org.osgi.framework.Constants.BUNDLE_MANIFESTVERSION;
|
||||
import static org.osgi.framework.Constants.BUNDLE_NAME;
|
||||
import static org.osgi.framework.Constants.BUNDLE_SYMBOLICNAME;
|
||||
import static org.osgi.framework.Constants.BUNDLE_VERSION;
|
||||
import static org.osgi.framework.Constants.DYNAMICIMPORT_PACKAGE;
|
||||
import static org.osgi.framework.Constants.EXPORT_PACKAGE;
|
||||
import static org.osgi.framework.Constants.IMPORT_PACKAGE;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.jar.Attributes;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.jar.Manifest;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
|
||||
import org.apache.maven.artifact.versioning.ArtifactVersion;
|
||||
import org.eclipse.osgi.framework.internal.core.Constants;
|
||||
import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
|
||||
import org.eclipse.osgi.util.ManifestElement;
|
||||
import org.osgi.framework.Version;
|
||||
|
||||
/**
|
||||
* Common functions used by the plugin.
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
*/
|
||||
public final class BundleUtil {
|
||||
static final String META_INF_SERVICES = "META-INF.services;partial=true;mandatory:=partial";
|
||||
private final static Logger logger = Logger.getLogger(BundleUtil.class.getName());
|
||||
/**
|
||||
* Returns the name of a bundle, or null if the given file is not a bundle.
|
||||
*
|
||||
* @param file
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public static String getBundleSymbolicName(File file) throws IOException {
|
||||
Manifest manifest = getManifest(file);
|
||||
return getBundleSymbolicName(manifest);
|
||||
}
|
||||
|
||||
static String getBundleSymbolicName(Manifest manifest) {
|
||||
if (manifest == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
|
||||
if (bundleName == null) {
|
||||
return bundleName;
|
||||
}
|
||||
int sc = bundleName.indexOf(';');
|
||||
if (sc != -1) {
|
||||
bundleName = bundleName.substring(0, sc);
|
||||
}
|
||||
return bundleName;
|
||||
}
|
||||
|
||||
static Manifest getManifest(File file) throws IOException {
|
||||
if (!file.exists()) {
|
||||
return null;
|
||||
}
|
||||
Manifest manifest = null;
|
||||
if (file.isDirectory()) {
|
||||
File mf = new File(file, "META-INF/MANIFEST.MF");
|
||||
if (mf.isFile()) {
|
||||
InputStream is = new FileInputStream(mf);
|
||||
manifest = new Manifest(new FileInputStream(mf));
|
||||
is.close();
|
||||
}
|
||||
} else {
|
||||
JarFile jar = new JarFile(file, false);
|
||||
manifest = jar.getManifest();
|
||||
jar.close();
|
||||
}
|
||||
return manifest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a Bundle manifest for a set of JAR files.
|
||||
*
|
||||
* @param jarFiles
|
||||
* @param name
|
||||
* @param symbolicName
|
||||
* @param version
|
||||
* @param dir
|
||||
* @return
|
||||
* @throws IllegalStateException
|
||||
*/
|
||||
static Manifest libraryManifest(Set<File> jarFiles, String name, String symbolicName, String version, String dir)
|
||||
throws IllegalStateException {
|
||||
return libraryManifest(jarFiles, name, symbolicName, version, dir, null, null);
|
||||
}
|
||||
/**
|
||||
* Generate a Bundle manifest for a set of JAR files.
|
||||
*
|
||||
* @param jarFiles
|
||||
* @param name
|
||||
* @param symbolicName
|
||||
* @param version
|
||||
* @param dir
|
||||
* @param buddyPolicy
|
||||
* @param env
|
||||
* @return
|
||||
* @throws IllegalStateException
|
||||
*/
|
||||
static Manifest libraryManifest(Set<File> jarFiles, String name, String symbolicName, String version, String dir, String buddyPolicy, String env)
|
||||
throws IllegalStateException {
|
||||
try {
|
||||
|
||||
// List exported packages and bundle classpath entries
|
||||
StringBuffer classpath = new StringBuffer();
|
||||
Set<String> exportedPackages = new HashSet<String>();
|
||||
for (File jarFile : jarFiles) {
|
||||
if (!jarFile.exists()) {
|
||||
logger.warning(jarFile + " doesn't exist.");
|
||||
continue;
|
||||
}
|
||||
addPackages(jarFile, exportedPackages, version);
|
||||
if (dir != null) {
|
||||
classpath.append(dir).append("/");
|
||||
}
|
||||
classpath.append(jarFile.getName());
|
||||
classpath.append(",");
|
||||
}
|
||||
|
||||
if (env == null) {
|
||||
env = "JavaSE-1.6";
|
||||
}
|
||||
Set<String> sysPackages = getSystemPackages(env);
|
||||
|
||||
// Generate export-package and import-package declarations
|
||||
StringBuffer exports = new StringBuffer();
|
||||
StringBuffer imports = new StringBuffer();
|
||||
Set<String> pkgs = new HashSet<String>();
|
||||
for (String export : exportedPackages) {
|
||||
String packageName = packageName(export);
|
||||
if (!pkgs.contains(packageName) && !sysPackages.contains(packageName)) {
|
||||
// Add corresponding import declaration
|
||||
if (!"META-INF.services".equals(packageName)) {
|
||||
imports.append(export);
|
||||
imports.append(',');
|
||||
}
|
||||
pkgs.add(packageName);
|
||||
exports.append(export);
|
||||
exports.append(',');
|
||||
} else {
|
||||
logger.warning("Duplicate or system package skipped: " + export);
|
||||
}
|
||||
}
|
||||
|
||||
// Create a manifest
|
||||
Manifest manifest = new Manifest();
|
||||
Attributes attributes = manifest.getMainAttributes();
|
||||
attributes.putValue("Manifest-Version", "1.0");
|
||||
attributes.putValue(BUNDLE_MANIFESTVERSION, "2");
|
||||
attributes.putValue(BUNDLE_SYMBOLICNAME, symbolicName);
|
||||
attributes.putValue(BUNDLE_NAME, name);
|
||||
attributes.putValue(BUNDLE_VERSION, version);
|
||||
// The system bundle has incomplete javax.transaction* packages exported
|
||||
attributes.putValue(DYNAMICIMPORT_PACKAGE, "javax.transaction;version=\"1.1\",javax.transaction.xa;version=\"1.1\",*");
|
||||
if (buddyPolicy != null && buddyPolicy.length() > 0){
|
||||
attributes.putValue("Eclipse-BuddyPolicy", buddyPolicy);
|
||||
}
|
||||
if (exports.length() > 1) {
|
||||
attributes.putValue(EXPORT_PACKAGE, exports.substring(0, exports.length() - 1));
|
||||
}
|
||||
/*
|
||||
if (imports.length() > 1) {
|
||||
attributes.putValue(IMPORT_PACKAGE, imports.substring(0, imports.length() - 1));
|
||||
}
|
||||
*/
|
||||
if (classpath.length() > 1) {
|
||||
attributes.putValue(BUNDLE_CLASSPATH, classpath.substring(0, classpath.length() - 1));
|
||||
}
|
||||
|
||||
return manifest;
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a bundle manifest.
|
||||
*
|
||||
* @param manifest
|
||||
* @param out
|
||||
* @throws IOException
|
||||
*/
|
||||
static void write(Manifest manifest, OutputStream out) throws IOException {
|
||||
DataOutputStream dos = new DataOutputStream(out);
|
||||
Attributes attributes = manifest.getMainAttributes();
|
||||
write(attributes, "Manifest-Version", dos);
|
||||
write(attributes, BUNDLE_MANIFESTVERSION, dos);
|
||||
write(attributes, BUNDLE_SYMBOLICNAME, dos);
|
||||
write(attributes, BUNDLE_NAME, dos);
|
||||
write(attributes, BUNDLE_VERSION, dos);
|
||||
write(attributes, DYNAMICIMPORT_PACKAGE, dos);
|
||||
write(attributes, BUNDLE_CLASSPATH, dos);
|
||||
write(attributes, IMPORT_PACKAGE, dos);
|
||||
write(attributes, EXPORT_PACKAGE, dos);
|
||||
write(attributes, "Eclipse-BuddyPolicy", dos);
|
||||
dos.flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add packages to be exported out of a JAR file.
|
||||
*
|
||||
* @param jarFile
|
||||
* @param packages
|
||||
* @throws IOException
|
||||
*/
|
||||
private static void addPackages(File jarFile, Set<String> packages, String version) throws IOException {
|
||||
// if (getBundleSymbolicName(jarFile) == null) {
|
||||
String ver = ";version=" + version;
|
||||
addAllPackages(jarFile, packages, ver);
|
||||
// } else {
|
||||
// addExportedPackages(jarFile, packages);
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Write manifest attributes.
|
||||
*
|
||||
* @param attributes
|
||||
* @param key
|
||||
* @param dos
|
||||
* @throws IOException
|
||||
*/
|
||||
private static void write(Attributes attributes, String key, DataOutputStream dos) throws IOException {
|
||||
String value = attributes.getValue(key);
|
||||
if (value == null) {
|
||||
return;
|
||||
}
|
||||
StringBuffer line = new StringBuffer();
|
||||
line.append(key);
|
||||
line.append(": ");
|
||||
line.append(new String(value.getBytes("UTF8")));
|
||||
line.append("\r\n");
|
||||
int l = line.length();
|
||||
if (l > 72) {
|
||||
for (int i = 70; i < l - 2;) {
|
||||
line.insert(i, "\r\n ");
|
||||
i += 72;
|
||||
l += 3;
|
||||
}
|
||||
}
|
||||
dos.writeBytes(line.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip an OSGi export, only retain the package name and version.
|
||||
*
|
||||
* @param export
|
||||
* @return
|
||||
*/
|
||||
private static String stripExport(String export) {
|
||||
int sc = export.indexOf(';');
|
||||
if (sc == -1) {
|
||||
return export;
|
||||
}
|
||||
String base = export.substring(0, sc);
|
||||
int v = export.indexOf("version=");
|
||||
if (v != -1) {
|
||||
sc = export.indexOf(';', v + 1);
|
||||
if (sc != -1) {
|
||||
return base + ";" + export.substring(v, sc);
|
||||
} else {
|
||||
return base + ";" + export.substring(v);
|
||||
}
|
||||
} else {
|
||||
return base;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add all the packages out of a JAR.
|
||||
*
|
||||
* @param jarFile
|
||||
* @param packages
|
||||
* @param version
|
||||
* @throws IOException
|
||||
*/
|
||||
private static void addAllPackages(File jarFile, Set<String> packages, String version) throws IOException {
|
||||
ZipInputStream is = new ZipInputStream(new FileInputStream(jarFile));
|
||||
ZipEntry entry;
|
||||
while ((entry = is.getNextEntry()) != null) {
|
||||
String entryName = entry.getName();
|
||||
// Export split packages for META-INF/services
|
||||
if(entryName.startsWith("META-INF/services/")) {
|
||||
packages.add(META_INF_SERVICES);
|
||||
}
|
||||
if (!entry.isDirectory() && entryName != null
|
||||
&& entryName.length() > 0
|
||||
&& !entryName.startsWith(".")
|
||||
&& entryName.endsWith(".class") // Exclude resources from Export-Package
|
||||
&& entryName.lastIndexOf("/") > 0
|
||||
&& Character.isJavaIdentifierStart(entryName.charAt(0))) {
|
||||
String pkg = entryName.substring(0, entryName.lastIndexOf("/")).replace('/', '.');
|
||||
if (!pkg.endsWith(".enum")) {
|
||||
packages.add(pkg + version);
|
||||
}
|
||||
}
|
||||
}
|
||||
is.close();
|
||||
}
|
||||
|
||||
private static Set<String> getSystemPackages(String env) throws IOException {
|
||||
Set<String> sysPackages = new HashSet<String>();
|
||||
InputStream is = BundleUtil.class.getResourceAsStream("/" + env + ".profile");
|
||||
if (is != null) {
|
||||
Properties props = new Properties();
|
||||
props.load(is);
|
||||
String pkgs = (String)props.get("org.osgi.framework.system.packages");
|
||||
if (pkgs != null) {
|
||||
for (String p : pkgs.split(",")) {
|
||||
sysPackages.add(p.trim());
|
||||
}
|
||||
}
|
||||
}
|
||||
return sysPackages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the exported package in the given export.
|
||||
* @param export
|
||||
* @return
|
||||
*/
|
||||
private static String packageName(String export) {
|
||||
int sc = export.indexOf(';');
|
||||
if (sc != -1) {
|
||||
export = export.substring(0, sc);
|
||||
}
|
||||
return export;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the packages exported by a bundle.
|
||||
*
|
||||
* @param file
|
||||
* @param packages
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public static Set<String> getExportedPackages(File file) throws IOException {
|
||||
if (!file.exists()) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
Set<String> packages = new HashSet<String>();
|
||||
Manifest manifest = getManifest(file);
|
||||
|
||||
// Read the export-package declaration and get a list of the packages available in a JAR
|
||||
String bundleName = null;
|
||||
String exports = null;
|
||||
|
||||
if (manifest != null) {
|
||||
exports = manifest.getMainAttributes().getValue(EXPORT_PACKAGE);
|
||||
bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
|
||||
}
|
||||
|
||||
if (bundleName == null) {
|
||||
Set<String> allPackages = new HashSet<String>();
|
||||
addAllPackages(file, allPackages, "");
|
||||
for (String p : allPackages) {
|
||||
packages.add(packageName(p));
|
||||
}
|
||||
return packages;
|
||||
}
|
||||
|
||||
packages.addAll(parsePackages(exports));
|
||||
|
||||
return packages;
|
||||
}
|
||||
|
||||
public static Set<String> getImportedPackages(File file) throws IOException {
|
||||
if (!file.exists()) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
Manifest manifest = getManifest(file);
|
||||
|
||||
// Read the export-package declaration and get a list of the packages available in a JAR
|
||||
String bundleName = null;
|
||||
String imports = null;
|
||||
|
||||
if (manifest != null) {
|
||||
imports = manifest.getMainAttributes().getValue(IMPORT_PACKAGE);
|
||||
bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
|
||||
if (imports != null && bundleName != null) {
|
||||
return parsePackages(imports);
|
||||
}
|
||||
}
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
private static Set<String> parsePackages(String header) {
|
||||
if (header == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
Set<String> packages = new HashSet<String>();
|
||||
// Parse the export-package declaration, and extract the individual packages
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
boolean q = false;
|
||||
for (int i = 0, n = header.length(); i < n; i++) {
|
||||
char c = header.charAt(i);
|
||||
if (c == '\"') {
|
||||
q = !q;
|
||||
}
|
||||
if (!q) {
|
||||
if (c == ',') {
|
||||
|
||||
// Add the exported package to the set, after making sure it really exists in
|
||||
// the JAR
|
||||
String export = buffer.toString();
|
||||
packages.add(packageName(export));
|
||||
buffer = new StringBuffer();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
buffer.append(c);
|
||||
}
|
||||
if (buffer.length() != 0) {
|
||||
String export = buffer.toString();
|
||||
packages.add(packageName(export));
|
||||
}
|
||||
return packages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the maven version into OSGi version
|
||||
* @param mavenVersion
|
||||
* @return
|
||||
*/
|
||||
static String osgiVersion(String mavenVersion) {
|
||||
ArtifactVersion ver = new OSGIArtifactVersion(mavenVersion);
|
||||
String qualifer = ver.getQualifier();
|
||||
if (qualifer != null) {
|
||||
StringBuffer buf = new StringBuffer(qualifer);
|
||||
for (int i = 0; i < buf.length(); i++) {
|
||||
char c = buf.charAt(i);
|
||||
if (Character.isLetterOrDigit(c) || c == '-' || c == '_') {
|
||||
// Keep as-is
|
||||
} else {
|
||||
buf.setCharAt(i, '_');
|
||||
}
|
||||
}
|
||||
qualifer = buf.toString();
|
||||
}
|
||||
Version osgiVersion =
|
||||
new Version(ver.getMajorVersion(), ver.getMinorVersion(), ver.getIncrementalVersion(), qualifer);
|
||||
String version = osgiVersion.toString();
|
||||
return version;
|
||||
}
|
||||
|
||||
private static String J2SE = "J2SE-";
|
||||
private static String JAVASE = "JavaSE-";
|
||||
private static String PROFILE_EXT = ".profile";
|
||||
private static URL findInSystemBundle(String entry) {
|
||||
ClassLoader loader = BundleUtil.class.getClassLoader();
|
||||
return loader == null ? ClassLoader.getSystemResource(entry) : loader.getResource(entry);
|
||||
}
|
||||
|
||||
private static URL findNextBestProfile(String javaEdition, Version javaVersion) {
|
||||
URL result = null;
|
||||
int minor = javaVersion.getMinor();
|
||||
do {
|
||||
result = findInSystemBundle(javaEdition + javaVersion.getMajor() + "." + minor + PROFILE_EXT);
|
||||
minor = minor - 1;
|
||||
} while (result == null && minor > 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static Properties findVMProfile(Properties properties) {
|
||||
Properties result = new Properties();
|
||||
// Find the VM profile name using J2ME properties
|
||||
String j2meConfig = properties.getProperty(Constants.J2ME_MICROEDITION_CONFIGURATION);
|
||||
String j2meProfiles = properties.getProperty(Constants.J2ME_MICROEDITION_PROFILES);
|
||||
String vmProfile = null;
|
||||
String javaEdition = null;
|
||||
Version javaVersion = null;
|
||||
if (j2meConfig != null && j2meConfig.length() > 0 && j2meProfiles != null && j2meProfiles.length() > 0) {
|
||||
// save the vmProfile based off of the config and profile
|
||||
// use the last profile; assuming that is the highest one
|
||||
String[] j2meProfileList = ManifestElement.getArrayFromList(j2meProfiles, " ");
|
||||
if (j2meProfileList != null && j2meProfileList.length > 0)
|
||||
vmProfile = j2meConfig + '_' + j2meProfileList[j2meProfileList.length - 1];
|
||||
} else {
|
||||
// No J2ME properties; use J2SE properties
|
||||
// Note that the CDC spec appears not to require VM implementations to set the
|
||||
// javax.microedition properties!! So we will try to fall back to the
|
||||
// java.specification.name property, but this is pretty ridiculous!!
|
||||
String javaSpecVersion = properties.getProperty("java.specification.version");
|
||||
// set the profile and EE based off of the java.specification.version
|
||||
// TODO We assume J2ME Foundation and J2SE here. need to support other profiles J2EE ...
|
||||
if (javaSpecVersion != null) {
|
||||
StringTokenizer st = new StringTokenizer(javaSpecVersion, " _-");
|
||||
javaSpecVersion = st.nextToken();
|
||||
String javaSpecName = properties.getProperty("java.specification.name");
|
||||
if ("J2ME Foundation Specification".equals(javaSpecName))
|
||||
vmProfile = "CDC-" + javaSpecVersion + "_Foundation-" + javaSpecVersion; //$NON-NLS-2$
|
||||
else {
|
||||
// look for JavaSE if 1.6 or greater; otherwise look for J2SE
|
||||
Version v16 = new Version("1.6");
|
||||
javaEdition = J2SE;
|
||||
try {
|
||||
javaVersion = new Version(javaSpecVersion);
|
||||
if (v16.compareTo(javaVersion) <= 0)
|
||||
javaEdition = JAVASE;
|
||||
} catch (IllegalArgumentException e) {
|
||||
// do nothing
|
||||
}
|
||||
vmProfile = javaEdition + javaSpecVersion;
|
||||
}
|
||||
}
|
||||
}
|
||||
URL url = null;
|
||||
// check for the java profile property for a url
|
||||
String propJavaProfile = FrameworkProperties.getProperty(Constants.OSGI_JAVA_PROFILE);
|
||||
if (propJavaProfile != null)
|
||||
try {
|
||||
// we assume a URL
|
||||
url = new URL(propJavaProfile);
|
||||
} catch (MalformedURLException e1) {
|
||||
// try using a relative path in the system bundle
|
||||
url = findInSystemBundle(propJavaProfile);
|
||||
}
|
||||
if (url == null && vmProfile != null) {
|
||||
// look for a profile in the system bundle based on the vm profile
|
||||
String javaProfile = vmProfile + PROFILE_EXT;
|
||||
url = findInSystemBundle(javaProfile);
|
||||
if (url == null)
|
||||
url = getNextBestProfile(javaEdition, javaVersion);
|
||||
}
|
||||
if (url == null)
|
||||
// the profile url is still null then use the osgi min profile in OSGi by default
|
||||
url = findInSystemBundle("OSGi_Minimum-1.1.profile");
|
||||
if (url != null) {
|
||||
InputStream in = null;
|
||||
try {
|
||||
in = url.openStream();
|
||||
result.load(new BufferedInputStream(in));
|
||||
} catch (IOException e) {
|
||||
// TODO consider logging ...
|
||||
} finally {
|
||||
if (in != null)
|
||||
try {
|
||||
in.close();
|
||||
} catch (IOException ee) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
// set the profile name if it does not provide one
|
||||
if (result.getProperty(Constants.OSGI_JAVA_PROFILE_NAME) == null)
|
||||
if (vmProfile != null)
|
||||
result.put(Constants.OSGI_JAVA_PROFILE_NAME, vmProfile.replace('_', '/'));
|
||||
else
|
||||
// last resort; default to the absolute minimum profile name for the framework
|
||||
result.put(Constants.OSGI_JAVA_PROFILE_NAME, "OSGi/Minimum-1.1");
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void loadVMProfile(Properties properties) {
|
||||
Properties profileProps = findVMProfile(properties);
|
||||
String systemExports = properties.getProperty(Constants.OSGI_FRAMEWORK_SYSTEM_PACKAGES);
|
||||
// set the system exports property using the vm profile; only if the property is not already set
|
||||
if (systemExports == null) {
|
||||
systemExports = profileProps.getProperty(Constants.OSGI_FRAMEWORK_SYSTEM_PACKAGES);
|
||||
if (systemExports != null)
|
||||
properties.put(Constants.OSGI_FRAMEWORK_SYSTEM_PACKAGES, systemExports);
|
||||
}
|
||||
// set the org.osgi.framework.bootdelegation property according to the java profile
|
||||
String type = properties.getProperty(Constants.OSGI_JAVA_PROFILE_BOOTDELEGATION); // a null value means ignore
|
||||
String profileBootDelegation = profileProps.getProperty(Constants.OSGI_BOOTDELEGATION);
|
||||
if (Constants.OSGI_BOOTDELEGATION_OVERRIDE.equals(type)) {
|
||||
if (profileBootDelegation == null)
|
||||
properties.remove(Constants.OSGI_BOOTDELEGATION); // override with a null value
|
||||
else
|
||||
properties.put(Constants.OSGI_BOOTDELEGATION, profileBootDelegation); // override with the profile value
|
||||
} else if (Constants.OSGI_BOOTDELEGATION_NONE.equals(type))
|
||||
properties.remove(Constants.OSGI_BOOTDELEGATION); // remove the bootdelegation property in case it was set
|
||||
// set the org.osgi.framework.executionenvironment property according to the java profile
|
||||
if (properties.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT) == null) {
|
||||
// get the ee from the java profile; if no ee is defined then try the java profile name
|
||||
String ee =
|
||||
profileProps.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, profileProps
|
||||
.getProperty(Constants.OSGI_JAVA_PROFILE_NAME));
|
||||
if (ee != null)
|
||||
properties.put(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, ee);
|
||||
}
|
||||
}
|
||||
|
||||
private static URL getNextBestProfile(String javaEdition, Version javaVersion) {
|
||||
if (javaVersion == null || (javaEdition != J2SE && javaEdition != JAVASE))
|
||||
return null; // we cannot automatically choose the next best profile unless this is a J2SE or JavaSE vm
|
||||
URL bestProfile = findNextBestProfile(javaEdition, javaVersion);
|
||||
if (bestProfile == null && javaEdition == JAVASE)
|
||||
// if this is a JavaSE VM then search for a lower J2SE profile
|
||||
bestProfile = findNextBestProfile(J2SE, javaVersion);
|
||||
return bestProfile;
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,219 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.tuscany.maven.bundle.plugin;
|
||||
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import org.apache.maven.artifact.versioning.ArtifactVersion;
|
||||
|
||||
public class OSGIArtifactVersion implements ArtifactVersion {
|
||||
private Integer buildNumber;
|
||||
|
||||
private Integer incrementalVersion;
|
||||
|
||||
private Integer majorVersion;
|
||||
|
||||
private Integer minorVersion;
|
||||
|
||||
private String qualifier;
|
||||
|
||||
private String unparsed;
|
||||
|
||||
public OSGIArtifactVersion(String version) {
|
||||
parseVersion(version);
|
||||
}
|
||||
|
||||
public int compareTo(Object o) {
|
||||
ArtifactVersion otherVersion = (ArtifactVersion)o;
|
||||
|
||||
int result = getMajorVersion() - otherVersion.getMajorVersion();
|
||||
if (result == 0) {
|
||||
result = getMinorVersion() - otherVersion.getMinorVersion();
|
||||
}
|
||||
if (result == 0) {
|
||||
result = getIncrementalVersion() - otherVersion.getIncrementalVersion();
|
||||
}
|
||||
if (result == 0) {
|
||||
if (this.qualifier != null) {
|
||||
String otherQualifier = otherVersion.getQualifier();
|
||||
|
||||
if (otherQualifier != null) {
|
||||
if ((this.qualifier.length() > otherQualifier.length()) && this.qualifier
|
||||
.startsWith(otherQualifier)) {
|
||||
// here, the longer one that otherwise match is
|
||||
// considered older
|
||||
result = -1;
|
||||
} else if ((this.qualifier.length() < otherQualifier.length()) && otherQualifier
|
||||
.startsWith(this.qualifier)) {
|
||||
// here, the longer one that otherwise match is
|
||||
// considered older
|
||||
result = 1;
|
||||
} else {
|
||||
result = this.qualifier.compareTo(otherQualifier);
|
||||
}
|
||||
} else {
|
||||
// otherVersion has no qualifier but we do - that's newer
|
||||
result = -1;
|
||||
}
|
||||
} else if (otherVersion.getQualifier() != null) {
|
||||
// otherVersion has a qualifier but we don't, we're newer
|
||||
result = 1;
|
||||
} else {
|
||||
result = getBuildNumber() - otherVersion.getBuildNumber();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (this == other) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (false == (other instanceof ArtifactVersion)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return 0 == compareTo(other);
|
||||
}
|
||||
|
||||
public int getBuildNumber() {
|
||||
return this.buildNumber != null ? this.buildNumber.intValue() : 0;
|
||||
}
|
||||
|
||||
public int getIncrementalVersion() {
|
||||
return this.incrementalVersion != null ? this.incrementalVersion.intValue() : 0;
|
||||
}
|
||||
|
||||
public int getMajorVersion() {
|
||||
return this.majorVersion != null ? this.majorVersion.intValue() : 0;
|
||||
}
|
||||
|
||||
public int getMinorVersion() {
|
||||
return this.minorVersion != null ? this.minorVersion.intValue() : 0;
|
||||
}
|
||||
|
||||
public String getQualifier() {
|
||||
return this.qualifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = 1229;
|
||||
|
||||
result = 1223 * result + getMajorVersion();
|
||||
result = 1223 * result + getMinorVersion();
|
||||
result = 1223 * result + getIncrementalVersion();
|
||||
result = 1223 * result + getBuildNumber();
|
||||
|
||||
if (null != getQualifier()) {
|
||||
result = 1223 * result + getQualifier().hashCode();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public final void parseVersion(String version) {
|
||||
this.unparsed = version;
|
||||
|
||||
int index = version.indexOf("-");
|
||||
|
||||
String part1;
|
||||
String part2 = null;
|
||||
|
||||
if (index < 0) {
|
||||
part1 = version;
|
||||
} else {
|
||||
part1 = version.substring(0, index);
|
||||
part2 = version.substring(index + 1);
|
||||
}
|
||||
|
||||
if (part2 != null) {
|
||||
try {
|
||||
if ((part2.length() == 1) || !part2.startsWith("0")) {
|
||||
this.buildNumber = Integer.valueOf(part2);
|
||||
} else {
|
||||
this.qualifier = part2;
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
this.qualifier = part2;
|
||||
}
|
||||
}
|
||||
|
||||
if ((part1.indexOf(".") < 0) && !part1.startsWith("0")) {
|
||||
try {
|
||||
this.majorVersion = Integer.valueOf(part1);
|
||||
} catch (NumberFormatException e) {
|
||||
// qualifier is the whole version, including "-"
|
||||
this.qualifier = version;
|
||||
this.buildNumber = null;
|
||||
}
|
||||
} else {
|
||||
StringTokenizer tok = new StringTokenizer(part1, ".");
|
||||
|
||||
String s;
|
||||
|
||||
if (tok.hasMoreTokens()) {
|
||||
s = tok.nextToken();
|
||||
try {
|
||||
this.majorVersion = Integer.valueOf(s);
|
||||
|
||||
if (tok.hasMoreTokens()) {
|
||||
s = tok.nextToken();
|
||||
try {
|
||||
this.minorVersion = Integer.valueOf(s);
|
||||
if (tok.hasMoreTokens()) {
|
||||
|
||||
s = tok.nextToken();
|
||||
try {
|
||||
this.incrementalVersion = Integer.valueOf(s);
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
this.qualifier = s;
|
||||
}
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
this.qualifier = s;
|
||||
}
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
this.qualifier = s;
|
||||
}
|
||||
}
|
||||
|
||||
if (tok.hasMoreTokens()) {
|
||||
StringBuffer qualifier = new StringBuffer(this.qualifier != null ? this.qualifier : "");
|
||||
qualifier.append(tok.nextToken());
|
||||
while (tok.hasMoreTokens()) {
|
||||
qualifier.append("_");
|
||||
qualifier.append(tok.nextToken());
|
||||
}
|
||||
|
||||
this.qualifier = qualifier.toString();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.unparsed;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,152 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.tuscany.maven.bundle.plugin;
|
||||
|
||||
import static org.apache.tuscany.maven.bundle.plugin.BundleUtil.write;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.jar.Manifest;
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.plugin.AbstractMojo;
|
||||
import org.apache.maven.plugin.MojoExecutionException;
|
||||
import org.apache.maven.plugin.logging.Log;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
|
||||
/**
|
||||
* A Maven plugin that builds an OSGi bundle for the project's third-party dependencies.
|
||||
*
|
||||
* @version $Rev$ $Date$
|
||||
* @goal assemble-thirdparty-bundle
|
||||
* @phase generate-resources
|
||||
* @requiresDependencyResolution test
|
||||
* @description Build an OSGi bundle for the project's third party dependencies
|
||||
*/
|
||||
public class ThirdPartyBundleBuildMojo extends AbstractMojo {
|
||||
|
||||
/**
|
||||
* The project to build the bundle for.
|
||||
*
|
||||
* @parameter expression="${project}"
|
||||
* @required
|
||||
* @readonly
|
||||
*/
|
||||
private MavenProject project;
|
||||
|
||||
/**
|
||||
* The bundle symbolic name
|
||||
*
|
||||
* @parameter
|
||||
*/
|
||||
private String symbolicName;
|
||||
|
||||
public void execute() throws MojoExecutionException {
|
||||
Log log = getLog();
|
||||
|
||||
String projectGroupId = project.getGroupId();
|
||||
Set<File> jarFiles = new HashSet<File>();
|
||||
for (Object o : project.getArtifacts()) {
|
||||
Artifact artifact = (Artifact)o;
|
||||
|
||||
if (!(Artifact.SCOPE_COMPILE.equals(artifact.getScope()) || Artifact.SCOPE_RUNTIME.equals(artifact
|
||||
.getScope()))) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Skipping artifact: " + artifact);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (!"jar".equals(artifact.getType())) {
|
||||
continue;
|
||||
}
|
||||
if (projectGroupId.equals(artifact.getGroupId())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Artifact: " + artifact);
|
||||
}
|
||||
String bundleName = null;
|
||||
try {
|
||||
bundleName = BundleUtil.getBundleSymbolicName(artifact.getFile());
|
||||
} catch (IOException e) {
|
||||
throw new MojoExecutionException(e.getMessage(), e);
|
||||
}
|
||||
if (bundleName == null || true) {
|
||||
if (artifact.getFile().exists()) {
|
||||
log.info("Adding third party jar: " + artifact);
|
||||
jarFiles.add(artifact.getFile());
|
||||
} else {
|
||||
log.warn("Third party jar not found: " + artifact);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
String version = BundleUtil.osgiVersion(project.getVersion());
|
||||
|
||||
Manifest mf = BundleUtil.libraryManifest(jarFiles, project.getName(), symbolicName, version, "lib");
|
||||
File file = new File(project.getBasedir(), "META-INF");
|
||||
file.mkdir();
|
||||
file = new File(file, "MANIFEST.MF");
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Generating " + file);
|
||||
}
|
||||
|
||||
FileOutputStream fos = new FileOutputStream(file);
|
||||
write(mf, fos);
|
||||
fos.close();
|
||||
|
||||
File lib = new File(project.getBasedir(), "lib");
|
||||
if (lib.isDirectory()) {
|
||||
for (File c : lib.listFiles()) {
|
||||
c.delete();
|
||||
}
|
||||
}
|
||||
lib.mkdir();
|
||||
byte[] buf = new byte[4096];
|
||||
for (File jar : jarFiles) {
|
||||
File jarFile = new File(lib, jar.getName());
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Copying " + jar + " to " + jarFile);
|
||||
}
|
||||
FileInputStream in = new FileInputStream(jar);
|
||||
FileOutputStream out = new FileOutputStream(jarFile);
|
||||
for (;;) {
|
||||
int len = in.read(buf);
|
||||
if (len > 0) {
|
||||
out.write(buf, 0, len);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
in.close();
|
||||
out.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new MojoExecutionException(e.getMessage(), e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,635 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.tuscany.maven.plugin.eclipse;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.Writer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.maven.plugin.MojoExecutionException;
|
||||
import org.apache.maven.plugin.eclipse.Constants;
|
||||
import org.apache.maven.plugin.eclipse.EclipseSourceDir;
|
||||
import org.apache.maven.plugin.eclipse.Messages;
|
||||
import org.apache.maven.plugin.eclipse.writers.AbstractEclipseWriter;
|
||||
import org.apache.maven.plugin.ide.IdeDependency;
|
||||
import org.apache.maven.plugin.ide.IdeUtils;
|
||||
import org.codehaus.plexus.util.IOUtil;
|
||||
import org.codehaus.plexus.util.StringUtils;
|
||||
import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
|
||||
import org.codehaus.plexus.util.xml.XMLWriter;
|
||||
|
||||
/**
|
||||
* Writes eclipse .classpath file.
|
||||
*
|
||||
* @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
|
||||
* @author <a href="mailto:kenney@neonics.com">Kenney Westerhof</a>
|
||||
* @author <a href="mailto:fgiust@apache.org">Fabrizio Giustina</a>
|
||||
* @version $Id: EclipseClasspathWriter.java 750073 2009-03-04 16:55:01Z aheritier $
|
||||
*/
|
||||
public class EclipseClasspathWriter
|
||||
extends AbstractEclipseWriter
|
||||
{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final String ORG_ECLIPSE_AJDT_INPATH = "org.eclipse.ajdt.inpath";
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final String ORG_ECLIPSE_AJDT_ASPECTPATH = "org.eclipse.ajdt.aspectpath";
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final String NAME = "name";
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final String VALUE = "value";
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final String ATTRIBUTE = "attribute";
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final String ATTRIBUTES = "attributes";
|
||||
|
||||
/**
|
||||
* Eclipse build path variable M2_REPO
|
||||
*/
|
||||
protected static final String M2_REPO = "M2_REPO"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Attribute for sourcepath.
|
||||
*/
|
||||
private static final String ATTR_SOURCEPATH = "sourcepath"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Attribute for output.
|
||||
*/
|
||||
private static final String ATTR_OUTPUT = "output"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Attribute for path.
|
||||
*/
|
||||
private static final String ATTR_PATH = "path"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Attribute for kind - Container (con), Variable (var)..etc.
|
||||
*/
|
||||
private static final String ATTR_KIND = "kind"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Attribute value for kind: var
|
||||
*/
|
||||
private static final String ATTR_VAR = "var"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Attribute value for kind: lib
|
||||
*/
|
||||
private static final String ATTR_LIB = "lib"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Attribute value for kind: src
|
||||
*/
|
||||
private static final String ATTR_SRC = "src"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Attribute name for source file includes in a path.
|
||||
*/
|
||||
private static final String ATTR_INCLUDING = "including";
|
||||
|
||||
/**
|
||||
* Attribute name for source file excludes in a path.
|
||||
*/
|
||||
private static final String ATTR_EXCLUDING = "excluding";
|
||||
|
||||
/**
|
||||
* Element for classpathentry.
|
||||
*/
|
||||
private static final String ELT_CLASSPATHENTRY = "classpathentry"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Element for classpath.
|
||||
*/
|
||||
private static final String ELT_CLASSPATH = "classpath"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* File name that stores project classpath settings.
|
||||
*/
|
||||
private static final String FILE_DOT_CLASSPATH = ".classpath"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* @see org.apache.maven.plugin.eclipse.writers.EclipseWriter#write()
|
||||
*/
|
||||
public void write()
|
||||
throws MojoExecutionException
|
||||
{
|
||||
|
||||
Writer w;
|
||||
|
||||
try
|
||||
{
|
||||
w =
|
||||
new OutputStreamWriter( new FileOutputStream( new File( config.getEclipseProjectDirectory(),
|
||||
FILE_DOT_CLASSPATH ) ), "UTF-8" );
|
||||
}
|
||||
catch ( IOException ex )
|
||||
{
|
||||
throw new MojoExecutionException( Messages.getString( "EclipsePlugin.erroropeningfile" ), ex ); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
XMLWriter writer = new PrettyPrintXMLWriter( w );
|
||||
|
||||
writer.startElement( ELT_CLASSPATH );
|
||||
|
||||
String defaultOutput =
|
||||
IdeUtils.toRelativeAndFixSeparator( config.getProjectBaseDir(), config.getBuildOutputDirectory(), false );
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Source roots and resources
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
// List<EclipseSourceDir>
|
||||
List specialSources = new ArrayList();
|
||||
|
||||
// Map<String,List<EclipseSourceDir>>
|
||||
Map byOutputDir = new HashMap();
|
||||
|
||||
for ( int j = 0; j < config.getSourceDirs().length; j++ )
|
||||
{
|
||||
EclipseSourceDir dir = config.getSourceDirs()[j];
|
||||
|
||||
// List<EclipseSourceDir>
|
||||
List byOutputDirs = (List) byOutputDir.get( dir.getOutput() );
|
||||
if ( byOutputDirs == null )
|
||||
{
|
||||
// ArrayList<EclipseSourceDir>
|
||||
byOutputDir.put( dir.getOutput() == null ? defaultOutput : dir.getOutput(), byOutputDirs =
|
||||
new ArrayList() );
|
||||
}
|
||||
byOutputDirs.add( dir );
|
||||
}
|
||||
|
||||
for ( int j = 0; j < config.getSourceDirs().length; j++ )
|
||||
{
|
||||
EclipseSourceDir dir = config.getSourceDirs()[j];
|
||||
|
||||
log.debug( "Processing " + ( dir.isResource() ? "re" : "" ) + "source " + dir.getPath() + ": output="
|
||||
+ dir.getOutput() + "; default output=" + defaultOutput );
|
||||
|
||||
boolean isSpecial = false;
|
||||
|
||||
// handle resource with nested output folders
|
||||
if ( dir.isResource() )
|
||||
{
|
||||
// Check if the output is a subdirectory of the default output,
|
||||
// and if the default output has any sources that copy there.
|
||||
|
||||
if ( dir.getOutput() != null // resource output dir is set
|
||||
&& !dir.getOutput().equals( defaultOutput ) // output dir is not default target/classes
|
||||
&& dir.getOutput().startsWith( defaultOutput ) // ... but is nested
|
||||
&& byOutputDir.get( defaultOutput ) != null // ???
|
||||
&& !( (List) byOutputDir.get( defaultOutput ) ).isEmpty() // ???
|
||||
)
|
||||
{
|
||||
// do not specify as source since the output will be nested. Instead, mark
|
||||
// it as a todo, and handle it with a custom build.xml file later.
|
||||
|
||||
log.debug( "Marking as special to prevent output folder nesting: " + dir.getPath() + " (output="
|
||||
+ dir.getOutput() + ")" );
|
||||
|
||||
isSpecial = true;
|
||||
specialSources.add( dir );
|
||||
}
|
||||
}
|
||||
|
||||
writer.startElement( ELT_CLASSPATHENTRY );
|
||||
|
||||
writer.addAttribute( ATTR_KIND, "src" ); //$NON-NLS-1$
|
||||
writer.addAttribute( ATTR_PATH, dir.getPath() );
|
||||
|
||||
if ( !isSpecial && dir.getOutput() != null && !defaultOutput.equals( dir.getOutput() ) )
|
||||
{
|
||||
writer.addAttribute( ATTR_OUTPUT, dir.getOutput() );
|
||||
}
|
||||
|
||||
String includes = dir.getInclude();
|
||||
|
||||
if ( !dir.isResource() )
|
||||
{
|
||||
// automatically include java files only: eclipse doesn't have the concept of a source only directory so it
|
||||
// will try to include non-java files found in maven source dirs
|
||||
includes = StringUtils.isEmpty( includes ) ? "**/*.java" : includes + "|**/*.java";
|
||||
}
|
||||
|
||||
if ( StringUtils.isNotEmpty( includes ) )
|
||||
{
|
||||
writer.addAttribute( ATTR_INCLUDING, includes );
|
||||
}
|
||||
|
||||
String excludes = dir.getExclude();
|
||||
|
||||
if ( dir.isResource() )
|
||||
{
|
||||
// automatically exclude java files: eclipse doesn't have the concept of resource directory so it will
|
||||
// try to compile any java file found in maven resource dirs
|
||||
excludes = StringUtils.isEmpty( excludes ) ? "**/*.java" : excludes + "|**/*.java";
|
||||
}
|
||||
|
||||
if ( StringUtils.isNotEmpty( excludes ) )
|
||||
{
|
||||
writer.addAttribute( ATTR_EXCLUDING, excludes );
|
||||
}
|
||||
|
||||
writer.endElement();
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
// handle the special sources.
|
||||
if ( !specialSources.isEmpty() )
|
||||
{
|
||||
log.info( "Creating maven-eclipse.xml Ant file to handle resources" );
|
||||
|
||||
try
|
||||
{
|
||||
Writer buildXmlWriter =
|
||||
new OutputStreamWriter( new FileOutputStream( new File( config.getEclipseProjectDirectory(),
|
||||
"maven-eclipse.xml" ) ), "UTF-8" );
|
||||
PrettyPrintXMLWriter buildXmlPrinter = new PrettyPrintXMLWriter( buildXmlWriter );
|
||||
|
||||
buildXmlPrinter.startElement( "project" );
|
||||
buildXmlPrinter.addAttribute( "default", "copy-resources" );
|
||||
|
||||
buildXmlPrinter.startElement( "target" );
|
||||
buildXmlPrinter.addAttribute( NAME, "init" );
|
||||
// initialize filtering tokens here
|
||||
buildXmlPrinter.endElement();
|
||||
|
||||
buildXmlPrinter.startElement( "target" );
|
||||
buildXmlPrinter.addAttribute( NAME, "copy-resources" );
|
||||
buildXmlPrinter.addAttribute( "depends", "init" );
|
||||
|
||||
for ( Iterator it = specialSources.iterator(); it.hasNext(); )
|
||||
{
|
||||
// TODO: merge source dirs on output path+filtering to reduce
|
||||
// <copy> tags for speed.
|
||||
EclipseSourceDir dir = (EclipseSourceDir) it.next();
|
||||
buildXmlPrinter.startElement( "copy" );
|
||||
buildXmlPrinter.addAttribute( "todir", dir.getOutput() );
|
||||
buildXmlPrinter.addAttribute( "filtering", "" + dir.isFiltering() );
|
||||
|
||||
buildXmlPrinter.startElement( "fileset" );
|
||||
buildXmlPrinter.addAttribute( "dir", dir.getPath() );
|
||||
if ( dir.getInclude() != null )
|
||||
{
|
||||
buildXmlPrinter.addAttribute( "includes", dir.getInclude() );
|
||||
}
|
||||
if ( dir.getExclude() != null )
|
||||
{
|
||||
buildXmlPrinter.addAttribute( "excludes", dir.getExclude() );
|
||||
}
|
||||
buildXmlPrinter.endElement();
|
||||
|
||||
buildXmlPrinter.endElement();
|
||||
}
|
||||
|
||||
buildXmlPrinter.endElement();
|
||||
|
||||
buildXmlPrinter.endElement();
|
||||
|
||||
IOUtil.close( buildXmlWriter );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
throw new MojoExecutionException( "Cannot create " + config.getEclipseProjectDirectory()
|
||||
+ "/maven-eclipse.xml", e );
|
||||
}
|
||||
|
||||
log.info( "Creating external launcher file" );
|
||||
// now create the launcher
|
||||
new EclipseAntExternalLaunchConfigurationWriter().init( log, config, "Maven_Ant_Builder.launch",
|
||||
"maven-eclipse.xml" ).write();
|
||||
|
||||
// finally add it to the project writer.
|
||||
|
||||
config.getBuildCommands().add(
|
||||
new BuildCommand(
|
||||
"org.eclipse.ui.externaltools.ExternalToolBuilder",
|
||||
"LaunchConfigHandle",
|
||||
"<project>/"
|
||||
+ EclipseLaunchConfigurationWriter.FILE_DOT_EXTERNAL_TOOL_BUILDERS
|
||||
+ "Maven_Ant_Builder.launch" ) );
|
||||
}
|
||||
*/
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// The default output
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
writer.startElement( ELT_CLASSPATHENTRY );
|
||||
writer.addAttribute( ATTR_KIND, ATTR_OUTPUT );
|
||||
writer.addAttribute( ATTR_PATH, defaultOutput );
|
||||
writer.endElement();
|
||||
|
||||
Set addedDependencies = new HashSet();
|
||||
// TODO if (..magic property equals orderDependencies..)
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Java API dependencies that may complete the classpath container so must
|
||||
// be declared BEFORE so that container access rules don't fail
|
||||
// ----------------------------------------------------------------------
|
||||
IdeDependency[] depsToWrite = config.getDepsOrdered();
|
||||
for ( int j = 0; j < depsToWrite.length; j++ )
|
||||
{
|
||||
IdeDependency dep = depsToWrite[j];
|
||||
if ( dep.isJavaApi() )
|
||||
{
|
||||
String depId = getDependencyId( dep );
|
||||
if ( !addedDependencies.contains( depId ) )
|
||||
{
|
||||
addDependency( writer, dep );
|
||||
addedDependencies.add( depId );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// The dependencies
|
||||
// ----------------------------------------------------------------------
|
||||
for ( int j = 0; j < depsToWrite.length; j++ )
|
||||
{
|
||||
IdeDependency dep = depsToWrite[j];
|
||||
|
||||
if ( dep.isAddedToClasspath() )
|
||||
{
|
||||
String depId = getDependencyId( dep );
|
||||
/* avoid duplicates in the classpath for artifacts with different types (like ejbs or test-jars) */
|
||||
if ( !addedDependencies.contains( depId ) )
|
||||
{
|
||||
addDependency( writer, dep );
|
||||
addedDependencies.add( depId );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Container classpath entries
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
for ( Iterator it = config.getClasspathContainers().iterator(); it.hasNext(); )
|
||||
{
|
||||
writer.startElement( ELT_CLASSPATHENTRY );
|
||||
writer.addAttribute( ATTR_KIND, "con" ); //$NON-NLS-1$
|
||||
writer.addAttribute( ATTR_PATH, (String) it.next() );
|
||||
writer.endElement(); // name
|
||||
}
|
||||
|
||||
writer.endElement();
|
||||
|
||||
IOUtil.close( w );
|
||||
|
||||
}
|
||||
|
||||
private String getDependencyId( IdeDependency dep )
|
||||
{
|
||||
String depId =
|
||||
dep.getGroupId() + ":" + dep.getArtifactId() + ":" + dep.getClassifier() + ":" + dep.getVersion();
|
||||
|
||||
if ( dep.isReferencedProject() )
|
||||
{
|
||||
// This dependency will be refered as an eclipse project
|
||||
depId = dep.getEclipseProjectName();
|
||||
}
|
||||
return depId;
|
||||
}
|
||||
|
||||
protected void addDependency( XMLWriter writer, IdeDependency dep )
|
||||
throws MojoExecutionException
|
||||
{
|
||||
|
||||
String path;
|
||||
String kind;
|
||||
String sourcepath = null;
|
||||
String javadocpath = null;
|
||||
// [rfeng] Force to non-PDE mode
|
||||
boolean pdeMode = false;
|
||||
|
||||
if ( dep.isReferencedProject() && !pdeMode )
|
||||
{
|
||||
path = "/" + dep.getEclipseProjectName(); //$NON-NLS-1$
|
||||
kind = ATTR_SRC;
|
||||
}
|
||||
else if ( dep.isReferencedProject() && pdeMode )
|
||||
{
|
||||
// don't do anything, referenced projects are automatically handled by eclipse in PDE builds
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
File artifactPath = dep.getFile();
|
||||
|
||||
if ( artifactPath == null )
|
||||
{
|
||||
log.error( Messages.getString( "EclipsePlugin.artifactpathisnull", dep.getId() ) ); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
|
||||
if ( dep.isSystemScoped() )
|
||||
{
|
||||
path = IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(), artifactPath, false );
|
||||
|
||||
if ( log.isDebugEnabled() )
|
||||
{
|
||||
log.debug( Messages.getString( "EclipsePlugin.artifactissystemscoped", //$NON-NLS-1$
|
||||
new Object[] { dep.getArtifactId(), path } ) );
|
||||
}
|
||||
|
||||
kind = ATTR_LIB;
|
||||
}
|
||||
else
|
||||
{
|
||||
File localRepositoryFile = new File( config.getLocalRepository().getBasedir() );
|
||||
|
||||
// if the dependency is not provided and the plugin runs in "pde mode", the dependency is
|
||||
// added to the Bundle-Classpath:
|
||||
if ( pdeMode && ( dep.isProvided() || dep.isOsgiBundle() ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if ( pdeMode && !dep.isProvided() && !dep.isTestDependency() )
|
||||
{
|
||||
// path for link created in .project, not to the actual file
|
||||
path = dep.getFile().getName();
|
||||
|
||||
kind = ATTR_LIB;
|
||||
}
|
||||
// running in PDE mode and the dependency is provided means, that it is provided by
|
||||
// the target platform. This case is covered by adding the plugin container
|
||||
else
|
||||
{
|
||||
String fullPath = artifactPath.getPath();
|
||||
String relativePath =
|
||||
IdeUtils.toRelativeAndFixSeparator( localRepositoryFile, new File( fullPath ), false );
|
||||
|
||||
if ( !new File( relativePath ).isAbsolute() )
|
||||
{
|
||||
path = M2_REPO + "/" //$NON-NLS-1$
|
||||
+ relativePath;
|
||||
kind = ATTR_VAR; //$NON-NLS-1$
|
||||
}
|
||||
else
|
||||
{
|
||||
path = relativePath;
|
||||
kind = ATTR_LIB;
|
||||
}
|
||||
}
|
||||
|
||||
if ( dep.getSourceAttachment() != null )
|
||||
{
|
||||
if ( ATTR_VAR.equals( kind ) )
|
||||
{
|
||||
sourcepath =
|
||||
M2_REPO
|
||||
+ "/" //$NON-NLS-1$
|
||||
+ IdeUtils.toRelativeAndFixSeparator( localRepositoryFile, dep.getSourceAttachment(),
|
||||
false );
|
||||
}
|
||||
else
|
||||
{
|
||||
// source archive must be referenced with the full path, we can't mix a lib with a variable
|
||||
sourcepath = IdeUtils.getCanonicalPath( dep.getSourceAttachment() );
|
||||
}
|
||||
}
|
||||
|
||||
if ( dep.getJavadocAttachment() != null )
|
||||
{
|
||||
// NB eclipse (3.1) doesn't support variables in javadoc paths, so we need to add the
|
||||
// full path for the maven repo
|
||||
javadocpath =
|
||||
StringUtils.replace( IdeUtils.getCanonicalPath( dep.getJavadocAttachment() ), "\\", "/" ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Skip aspectj libraries since they are in the container.
|
||||
if ( ( config.getAjdtVersion() != 0 ) && dep.getArtifactId().toLowerCase().startsWith( "aspectj" ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
writer.startElement( ELT_CLASSPATHENTRY );
|
||||
writer.addAttribute( ATTR_KIND, kind );
|
||||
writer.addAttribute( ATTR_PATH, path );
|
||||
|
||||
if ( sourcepath != null )
|
||||
{
|
||||
writer.addAttribute( ATTR_SOURCEPATH, sourcepath );
|
||||
}
|
||||
|
||||
boolean attributeElemOpen = false;
|
||||
|
||||
if ( javadocpath != null )
|
||||
{
|
||||
if ( !attributeElemOpen )
|
||||
{
|
||||
writer.startElement( ATTRIBUTES ); //$NON-NLS-1$
|
||||
attributeElemOpen = true;
|
||||
}
|
||||
|
||||
writer.startElement( ATTRIBUTE ); //$NON-NLS-1$
|
||||
writer.addAttribute( VALUE, "jar:" + new File( javadocpath ).toURI() + "!/" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
writer.addAttribute( NAME, "javadoc_location" ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
writer.endElement();
|
||||
|
||||
}
|
||||
|
||||
if ( Constants.PROJECT_PACKAGING_WAR.equals( this.config.getPackaging() ) && config.getWtpapplicationxml()
|
||||
&& kind.equals( ATTR_VAR ) && !dep.isTestDependency() && !dep.isProvided()
|
||||
&& !dep.isSystemScopedOutsideProject( this.config.getProject() ) )
|
||||
{
|
||||
if ( !attributeElemOpen )
|
||||
{
|
||||
writer.startElement( ATTRIBUTES ); //$NON-NLS-1$
|
||||
attributeElemOpen = true;
|
||||
}
|
||||
|
||||
writer.startElement( ATTRIBUTE ); //$NON-NLS-1$
|
||||
writer.addAttribute( VALUE, "/WEB-INF/lib" ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
writer.addAttribute( NAME, "org.eclipse.jst.component.dependency" ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
writer.endElement();
|
||||
|
||||
}
|
||||
|
||||
if ( dep.isAjdtDependency() && ( config.getAjdtVersion() >= 1.5 ) )
|
||||
{
|
||||
if ( !attributeElemOpen )
|
||||
{
|
||||
writer.startElement( ATTRIBUTES ); //$NON-NLS-1$
|
||||
attributeElemOpen = true;
|
||||
}
|
||||
|
||||
writer.startElement( ATTRIBUTE ); //$NON-NLS-1$
|
||||
writer.addAttribute( NAME, ORG_ECLIPSE_AJDT_ASPECTPATH ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
writer.addAttribute( VALUE, Boolean.TRUE.toString() ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
writer.endElement();
|
||||
|
||||
}
|
||||
|
||||
if ( dep.isAjdtWeaveDependency() && ( config.getAjdtVersion() >= 1.5 ) )
|
||||
{
|
||||
if ( !attributeElemOpen )
|
||||
{
|
||||
writer.startElement( ATTRIBUTES ); //$NON-NLS-1$
|
||||
attributeElemOpen = true;
|
||||
}
|
||||
|
||||
writer.startElement( ATTRIBUTE ); //$NON-NLS-1$
|
||||
writer.addAttribute( NAME, ORG_ECLIPSE_AJDT_INPATH ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
writer.addAttribute( VALUE, Boolean.TRUE.toString() ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
writer.endElement();
|
||||
|
||||
}
|
||||
|
||||
if ( attributeElemOpen )
|
||||
{
|
||||
writer.endElement();
|
||||
}
|
||||
writer.endElement();
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,208 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.tuscany.maven.plugin.eclipse;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.apache.maven.plugin.AbstractMojo;
|
||||
import org.apache.maven.plugin.MojoExecutionException;
|
||||
import org.apache.maven.plugin.eclipse.Constants;
|
||||
import org.apache.maven.plugin.eclipse.EclipseConfigFile;
|
||||
import org.apache.maven.plugin.ide.IdeUtils;
|
||||
|
||||
/**
|
||||
* Deletes the .project, .classpath, .wtpmodules files and .settings folder used by Eclipse.
|
||||
*
|
||||
* @goal clean
|
||||
*/
|
||||
public class EclipseCleanMojo
|
||||
extends AbstractMojo
|
||||
{
|
||||
|
||||
/**
|
||||
* Definition file for Eclipse Web Tools project.
|
||||
*/
|
||||
private static final String FILE_DOT_WTPMODULES = ".wtpmodules"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Classpath definition file for an Eclipse Java project.
|
||||
*/
|
||||
private static final String FILE_DOT_CLASSPATH = ".classpath"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Project definition file for an Eclipse Project.
|
||||
*/
|
||||
private static final String FILE_DOT_PROJECT = ".project"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Web Project definition file for Eclipse Web Tools Project (Release 1.0x).
|
||||
*/
|
||||
private static final String DIR_DOT_SETTINGS = ".settings"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* File name where the WTP component settings will be stored - WTP 1.0 name.
|
||||
*/
|
||||
private static final String FILE_DOT_COMPONENT = ".settings/.component"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* File name where the WTP component settings will be stored - WTP 1.5 name.
|
||||
*/
|
||||
private static final String FILE_DOT_COMPONENT_15 = ".settings/org.eclipse.wst.common.component"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* File name where Eclipse Project's Facet configuration will be stored.
|
||||
*/
|
||||
private static final String FILE_FACET_CORE_XML = ".settings/org.eclipse.wst.common.project.facet.core.xml"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* General project preferences.
|
||||
*/
|
||||
private static final String FILE_ECLIPSE_JDT_CORE_PREFS = ".settings/org.eclipse.jdt.core.prefs"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* AJDT preferences.
|
||||
*/
|
||||
private static final String FILE_AJDT_PREFS = ".settings/org.eclipse.ajdt.ui.prefs"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Packaging for the current project.
|
||||
*
|
||||
* @parameter expression="${project.packaging}"
|
||||
*/
|
||||
private String packaging;
|
||||
|
||||
/**
|
||||
* The root directory of the project
|
||||
*
|
||||
* @parameter expression="${basedir}"
|
||||
*/
|
||||
private File basedir;
|
||||
|
||||
/**
|
||||
* Skip the operation when true.
|
||||
*
|
||||
* @parameter expression="${eclipse.skip}" default-value="false"
|
||||
*/
|
||||
private boolean skip;
|
||||
|
||||
/**
|
||||
* additional generic configuration files for eclipse
|
||||
*
|
||||
* @parameter
|
||||
*/
|
||||
private EclipseConfigFile[] additionalConfig;
|
||||
|
||||
/**
|
||||
* @see org.apache.maven.plugin.AbstractMojo#execute()
|
||||
*/
|
||||
public void execute()
|
||||
throws MojoExecutionException
|
||||
{
|
||||
if ( skip )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( Constants.PROJECT_PACKAGING_POM.equals( this.packaging ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
delete( new File( basedir, FILE_DOT_PROJECT ) );
|
||||
delete( new File( basedir, FILE_DOT_CLASSPATH ) );
|
||||
delete( new File( basedir, FILE_DOT_WTPMODULES ) );
|
||||
|
||||
delete( new File( basedir, FILE_DOT_COMPONENT ) );
|
||||
delete( new File( basedir, FILE_DOT_COMPONENT_15 ) );
|
||||
delete( new File( basedir, FILE_FACET_CORE_XML ) );
|
||||
delete( new File( basedir, FILE_ECLIPSE_JDT_CORE_PREFS ) );
|
||||
delete( new File( basedir, FILE_AJDT_PREFS ) );
|
||||
|
||||
File settingsDir = new File( basedir, DIR_DOT_SETTINGS );
|
||||
if ( settingsDir.exists() && settingsDir.isDirectory() && settingsDir.list().length == 0 )
|
||||
{
|
||||
delete( settingsDir );
|
||||
}
|
||||
|
||||
if ( additionalConfig != null )
|
||||
{
|
||||
for ( int i = 0; i < additionalConfig.length; i++ )
|
||||
{
|
||||
delete( new File( basedir, additionalConfig[i].getName() ) );
|
||||
}
|
||||
}
|
||||
|
||||
cleanExtras();
|
||||
}
|
||||
|
||||
protected void cleanExtras()
|
||||
throws MojoExecutionException
|
||||
{
|
||||
// extension point.
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a file, handling log messages and exceptions
|
||||
*
|
||||
* @param f File to be deleted
|
||||
* @throws MojoExecutionException only if a file exists and can't be deleted
|
||||
*/
|
||||
protected void delete( File f )
|
||||
throws MojoExecutionException
|
||||
{
|
||||
IdeUtils.delete( f, getLog() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for <code>basedir</code>.
|
||||
*
|
||||
* @return Returns the basedir.
|
||||
*/
|
||||
public File getBasedir()
|
||||
{
|
||||
return this.basedir;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for <code>basedir</code>.
|
||||
*
|
||||
* @param basedir The basedir to set.
|
||||
*/
|
||||
public void setBasedir( File basedir )
|
||||
{
|
||||
this.basedir = basedir;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the packaging
|
||||
*/
|
||||
public String getPackaging()
|
||||
{
|
||||
return this.packaging;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param packaging the packaging to set
|
||||
*/
|
||||
public void setPackaging( String packaging )
|
||||
{
|
||||
this.packaging = packaging;
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,357 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.tuscany.maven.plugin.eclipse;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.maven.model.Resource;
|
||||
import org.apache.maven.plugin.MojoExecutionException;
|
||||
import org.apache.maven.plugin.eclipse.BuildCommand;
|
||||
import org.apache.maven.plugin.eclipse.Messages;
|
||||
import org.apache.maven.plugin.eclipse.writers.AbstractEclipseWriter;
|
||||
import org.apache.maven.plugin.ide.IdeDependency;
|
||||
import org.apache.maven.plugin.ide.IdeUtils;
|
||||
import org.codehaus.plexus.util.IOUtil;
|
||||
import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
|
||||
import org.codehaus.plexus.util.xml.XMLWriter;
|
||||
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||
import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
|
||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||
|
||||
/**
|
||||
* Writes eclipse .project file.
|
||||
*
|
||||
* @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
|
||||
* @author <a href="mailto:kenney@neonics.com">Kenney Westerhof</a>
|
||||
* @author <a href="mailto:fgiust@apache.org">Fabrizio Giustina</a>
|
||||
* @version $Id: EclipseProjectWriter.java 728546 2008-12-21 22:56:51Z bentmann $
|
||||
*/
|
||||
public class EclipseProjectWriter
|
||||
extends AbstractEclipseWriter
|
||||
{
|
||||
private static final String ELT_NAME = "name"; //$NON-NLS-1$
|
||||
|
||||
private static final String ELT_BUILD_COMMAND = "buildCommand"; //$NON-NLS-1$
|
||||
|
||||
private static final String ELT_BUILD_SPEC = "buildSpec"; //$NON-NLS-1$
|
||||
|
||||
private static final String ELT_NATURE = "nature"; //$NON-NLS-1$
|
||||
|
||||
private static final String ELT_NATURES = "natures"; //$NON-NLS-1$
|
||||
|
||||
private static final String FILE_DOT_PROJECT = ".project"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* Constant for links to files.
|
||||
*/
|
||||
private static final int LINK_TYPE_FILE = 1;
|
||||
|
||||
/**
|
||||
* Constant for links to directories.
|
||||
*/
|
||||
private static final int LINK_TYPE_DIRECTORY = 2;
|
||||
|
||||
/**
|
||||
* @see org.apache.tuscany.sca.maven.plugin.eclipse.writers.EclipseWriter#write()
|
||||
*/
|
||||
public void write()
|
||||
throws MojoExecutionException
|
||||
{
|
||||
|
||||
Set projectnatures = new LinkedHashSet();
|
||||
Set buildCommands = new LinkedHashSet();
|
||||
|
||||
File dotProject = new File( config.getEclipseProjectDirectory(), FILE_DOT_PROJECT );
|
||||
|
||||
if ( dotProject.exists() )
|
||||
{
|
||||
|
||||
log.info( Messages.getString( "EclipsePlugin.keepexisting", dotProject.getAbsolutePath() ) ); //$NON-NLS-1$
|
||||
|
||||
// parse existing file in order to keep manually-added entries
|
||||
Reader reader = null;
|
||||
try
|
||||
{
|
||||
reader = new InputStreamReader( new FileInputStream( dotProject ), "UTF-8" );
|
||||
Xpp3Dom dom = Xpp3DomBuilder.build( reader );
|
||||
|
||||
Xpp3Dom naturesElement = dom.getChild( ELT_NATURES );
|
||||
if ( naturesElement != null )
|
||||
{
|
||||
Xpp3Dom[] existingNatures = naturesElement.getChildren( ELT_NATURE );
|
||||
for ( int j = 0; j < existingNatures.length; j++ )
|
||||
{
|
||||
// adds all the existing natures
|
||||
projectnatures.add( existingNatures[j].getValue() );
|
||||
}
|
||||
}
|
||||
|
||||
Xpp3Dom buildSpec = dom.getChild( ELT_BUILD_SPEC );
|
||||
if ( buildSpec != null )
|
||||
{
|
||||
Xpp3Dom[] existingBuildCommands = buildSpec.getChildren( ELT_BUILD_COMMAND );
|
||||
for ( int j = 0; j < existingBuildCommands.length; j++ )
|
||||
{
|
||||
Xpp3Dom buildCommandName = existingBuildCommands[j].getChild( ELT_NAME );
|
||||
if ( buildCommandName != null )
|
||||
{
|
||||
buildCommands.add( new BuildCommand( existingBuildCommands[j] ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch ( XmlPullParserException e )
|
||||
{
|
||||
log.warn( Messages.getString( "EclipsePlugin.cantparseexisting", dotProject.getAbsolutePath() ) ); //$NON-NLS-1$
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
log.warn( Messages.getString( "EclipsePlugin.cantparseexisting", dotProject.getAbsolutePath() ) ); //$NON-NLS-1$
|
||||
}
|
||||
finally
|
||||
{
|
||||
IOUtil.close( reader );
|
||||
}
|
||||
}
|
||||
|
||||
// adds new entries after the existing ones
|
||||
for ( Iterator iter = config.getProjectnatures().iterator(); iter.hasNext(); )
|
||||
{
|
||||
projectnatures.add( iter.next() );
|
||||
}
|
||||
|
||||
for ( Iterator iter = config.getBuildCommands().iterator(); iter.hasNext(); )
|
||||
{
|
||||
buildCommands.add( (BuildCommand) iter.next() );
|
||||
}
|
||||
|
||||
Writer w;
|
||||
|
||||
try
|
||||
{
|
||||
w = new OutputStreamWriter( new FileOutputStream( dotProject ), "UTF-8" );
|
||||
}
|
||||
catch ( IOException ex )
|
||||
{
|
||||
throw new MojoExecutionException( Messages.getString( "EclipsePlugin.erroropeningfile" ), ex ); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
XMLWriter writer = new PrettyPrintXMLWriter( w );
|
||||
|
||||
writer.startElement( "projectDescription" ); //$NON-NLS-1$
|
||||
|
||||
writer.startElement( ELT_NAME );
|
||||
writer.writeText( config.getEclipseProjectName() );
|
||||
writer.endElement();
|
||||
|
||||
// TODO: this entire element might be dropped if the comment is null.
|
||||
// but as the maven1 eclipse plugin does it, it's better to be safe than sorry
|
||||
// A eclipse developer might want to look at this.
|
||||
writer.startElement( "comment" ); //$NON-NLS-1$
|
||||
|
||||
if ( config.getProject().getDescription() != null )
|
||||
{
|
||||
writer.writeText( config.getProject().getDescription() );
|
||||
}
|
||||
|
||||
writer.endElement();
|
||||
|
||||
writer.startElement( "projects" ); //$NON-NLS-1$
|
||||
|
||||
// referenced projects should not be added for plugins
|
||||
if ( !config.isPde() )
|
||||
{
|
||||
List duplicates = new ArrayList();
|
||||
for ( int j = 0; j < config.getDepsOrdered().length; j++ )
|
||||
{
|
||||
IdeDependency dep = config.getDepsOrdered()[j];
|
||||
// Avoid duplicates entries when same project is refered using multiple types
|
||||
// (ejb, test-jar ...)
|
||||
if ( dep.isReferencedProject() && !duplicates.contains( dep.getEclipseProjectName() ) )
|
||||
{
|
||||
writer.startElement( "project" ); //$NON-NLS-1$
|
||||
writer.writeText( dep.getEclipseProjectName() );
|
||||
writer.endElement();
|
||||
duplicates.add( dep.getEclipseProjectName() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
writer.endElement(); // projects
|
||||
|
||||
writer.startElement( ELT_BUILD_SPEC );
|
||||
|
||||
for ( Iterator it = buildCommands.iterator(); it.hasNext(); )
|
||||
{
|
||||
( (BuildCommand) it.next() ).print( writer );
|
||||
}
|
||||
|
||||
writer.endElement(); // buildSpec
|
||||
|
||||
writer.startElement( ELT_NATURES );
|
||||
|
||||
for ( Iterator it = projectnatures.iterator(); it.hasNext(); )
|
||||
{
|
||||
writer.startElement( ELT_NATURE );
|
||||
writer.writeText( (String) it.next() );
|
||||
writer.endElement(); // name
|
||||
}
|
||||
|
||||
writer.endElement(); // natures
|
||||
|
||||
/*
|
||||
boolean addLinks = !config.getProjectBaseDir().equals( config.getEclipseProjectDirectory() );
|
||||
|
||||
if ( addLinks || ( config.isPde() && config.getDepsOrdered().length > 0 ) )
|
||||
{
|
||||
writer.startElement( "linkedResources" ); //$NON-NLS-1$
|
||||
|
||||
if ( addLinks )
|
||||
{
|
||||
|
||||
addFileLink( writer, config.getProjectBaseDir(), config.getEclipseProjectDirectory(),
|
||||
config.getProject().getFile() );
|
||||
|
||||
addSourceLinks( writer, config.getProjectBaseDir(), config.getEclipseProjectDirectory(),
|
||||
config.getProject().getCompileSourceRoots() );
|
||||
addResourceLinks( writer, config.getProjectBaseDir(), config.getEclipseProjectDirectory(),
|
||||
config.getProject().getBuild().getResources() );
|
||||
|
||||
addSourceLinks( writer, config.getProjectBaseDir(), config.getEclipseProjectDirectory(),
|
||||
config.getProject().getTestCompileSourceRoots() );
|
||||
addResourceLinks( writer, config.getProjectBaseDir(), config.getEclipseProjectDirectory(),
|
||||
config.getProject().getBuild().getTestResources() );
|
||||
|
||||
}
|
||||
|
||||
if ( config.isPde() )
|
||||
{
|
||||
for ( int j = 0; j < config.getDepsOrdered().length; j++ )
|
||||
{
|
||||
IdeDependency dep = config.getDepsOrdered()[j];
|
||||
|
||||
if ( dep.isAddedToClasspath() && !dep.isProvided() && !dep.isReferencedProject() &&
|
||||
!dep.isTestDependency() && !dep.isOsgiBundle() )
|
||||
{
|
||||
String name = dep.getFile().getName();
|
||||
addLink( writer, name, StringUtils.replace( IdeUtils.getCanonicalPath( dep.getFile() ), "\\",
|
||||
"/" ), LINK_TYPE_FILE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
writer.endElement(); // linkedResources
|
||||
}
|
||||
*/
|
||||
|
||||
writer.endElement(); // projectDescription
|
||||
|
||||
IOUtil.close( w );
|
||||
}
|
||||
|
||||
private void addFileLink( XMLWriter writer, File projectBaseDir, File basedir, File file )
|
||||
throws MojoExecutionException
|
||||
{
|
||||
if ( file.isFile() )
|
||||
{
|
||||
String name = IdeUtils.toRelativeAndFixSeparator( projectBaseDir, file, true );
|
||||
String location = IdeUtils.getCanonicalPath( file ).replaceAll( "\\\\", "/" ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
addLink( writer, name, location, LINK_TYPE_FILE );
|
||||
}
|
||||
else
|
||||
{
|
||||
log.warn( Messages.getString( "EclipseProjectWriter.notafile", file ) ); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
private void addSourceLinks( XMLWriter writer, File projectBaseDir, File basedir, List sourceRoots )
|
||||
throws MojoExecutionException
|
||||
{
|
||||
for ( Iterator it = sourceRoots.iterator(); it.hasNext(); )
|
||||
{
|
||||
String sourceRootString = (String) it.next();
|
||||
File sourceRoot = new File( sourceRootString );
|
||||
|
||||
if ( sourceRoot.isDirectory() )
|
||||
{
|
||||
String name = IdeUtils.toRelativeAndFixSeparator( projectBaseDir, sourceRoot, true );
|
||||
String location = IdeUtils.getCanonicalPath( sourceRoot ).replaceAll( "\\\\", "/" ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
addLink( writer, name, location, LINK_TYPE_DIRECTORY );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addResourceLinks( XMLWriter writer, File projectBaseDir, File basedir, List sourceRoots )
|
||||
throws MojoExecutionException
|
||||
{
|
||||
for ( Iterator it = sourceRoots.iterator(); it.hasNext(); )
|
||||
{
|
||||
String resourceDirString = ( (Resource) it.next() ).getDirectory();
|
||||
File resourceDir = new File( resourceDirString );
|
||||
|
||||
if ( resourceDir.isDirectory() )
|
||||
{
|
||||
String name = IdeUtils.toRelativeAndFixSeparator( projectBaseDir, resourceDir, true );
|
||||
String location = IdeUtils.getCanonicalPath( resourceDir ).replaceAll( "\\\\", "/" ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
addLink( writer, name, location, LINK_TYPE_DIRECTORY );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param writer
|
||||
* @param name
|
||||
* @param location
|
||||
*/
|
||||
private void addLink( XMLWriter writer, String name, String location, int type )
|
||||
{
|
||||
writer.startElement( "link" ); //$NON-NLS-1$
|
||||
|
||||
writer.startElement( ELT_NAME );
|
||||
writer.writeText( name );
|
||||
writer.endElement(); // name
|
||||
|
||||
writer.startElement( "type" ); //$NON-NLS-1$
|
||||
writer.writeText( Integer.toString( type ) );
|
||||
writer.endElement(); // type
|
||||
|
||||
writer.startElement( "location" ); //$NON-NLS-1$
|
||||
|
||||
writer.writeText( location );
|
||||
|
||||
writer.endElement(); // location
|
||||
|
||||
writer.endElement(); // link
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.tuscany.maven.plugin.eclipse;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:fgiust@users.sourceforge.net">Fabrizio Giustina</a>
|
||||
* @version $Id: Messages.java 728546 2008-12-21 22:56:51Z bentmann $
|
||||
*/
|
||||
public class Messages
|
||||
{
|
||||
|
||||
private static final String BUNDLE_NAME = "org.apache.tuscany.maven.plugin.eclipse.messages"; //$NON-NLS-1$
|
||||
|
||||
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle( BUNDLE_NAME );
|
||||
|
||||
private Messages()
|
||||
{
|
||||
}
|
||||
|
||||
public static String getString( String key )
|
||||
{
|
||||
try
|
||||
{
|
||||
return RESOURCE_BUNDLE.getString( key );
|
||||
}
|
||||
catch ( MissingResourceException e )
|
||||
{
|
||||
return '!' + key + '!';
|
||||
}
|
||||
}
|
||||
|
||||
public static String getString( String key, Object[] params )
|
||||
{
|
||||
try
|
||||
{
|
||||
return MessageFormat.format( RESOURCE_BUNDLE.getString( key ), params );
|
||||
}
|
||||
catch ( MissingResourceException e )
|
||||
{
|
||||
return '!' + key + '!';
|
||||
}
|
||||
}
|
||||
|
||||
public static String getString( String key, Object param )
|
||||
{
|
||||
return getString( key, new Object[] { param } );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,205 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
Copyright (c) 2005 - 2009 The Apache Software Foundation
|
||||
|
||||
This product includes software developed by
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
EclipsePlugin.missingpom=There must be a POM in the current working directory for the Eclipse plugin to work.
|
||||
EclipsePlugin.pompackaging=Not running eclipse plugin goal for pom project
|
||||
EclipsePlugin.notadir=Not a directory: "{0}"
|
||||
EclipsePlugin.cantcreatedir=Can't create directory "{0}"
|
||||
EclipsePlugin.erroropeningfile=Exception while opening file.
|
||||
EclipsePlugin.cantwritetofile=Unable to write to file: {0}
|
||||
EclipsePlugin.cantfindresource=Unable to resolve resource location: {0}
|
||||
EclipsePlugin.cantreadfile=Unable to read file: {0}
|
||||
EclipsePlugin.keepexisting=File {0} already exists.\n Additional settings will be preserved, run mvn eclipse:clean if you want old settings to be removed.
|
||||
EclipsePlugin.cantparseexisting=Unable to parse existing file: {0}. Settings will not be preserved.
|
||||
EclipsePlugin.wrote=Wrote Eclipse project for "{0}" to {1}.
|
||||
EclipsePlugin.missingelement=Missing element from the project descriptor: "{0}"
|
||||
EclipsePlugin.artifactpathisnull=The artifact path was null. Artifact id: {0}
|
||||
EclipsePlugin.artifactissystemscoped=The artifact has scope 'system'. Artifact id: {0}. System path: {1}
|
||||
EclipsePlugin.unsupportedwtp=Unsupported WTP version: {0}. This plugin currently supports only the following versions: {1}.
|
||||
EclipsePlugin.wtpversion=Adding support for WTP version {0}.
|
||||
EclipsePlugin.missingjrecontainer=You did specify a list of classpath containers without the base org.eclipse.jdt.launching.JRE_CONTAINER.\n If you specify custom classpath containers you should also add org.eclipse.jdt.launching.JRE_CONTAINER to the list
|
||||
EclipsePlugin.deprecatedpar=Plugin parameter "{0}" is deprecated, please use "{1}"
|
||||
EclipsePlugin.foundadir={0} is a directory, ignoring.
|
||||
EclipsePlugin.workspace=Using Eclipse Workspace: {0}
|
||||
EclipsePlugin.cantcanonicalize=Can't canonicalize system path: {0}
|
||||
EclipsePlugin.unchangedmanifest=Not writing Manifest file as it is unchanged: {0}
|
||||
EclipsePlugin.invalidvminworkspace=Workspace defines a VM that does not contain a valid jre/lib/rt.jar: {0}
|
||||
|
||||
EclipseSettingsWriter.wrotesettings=Wrote settings to {0}
|
||||
EclipseSettingsWriter.cannotcreatesettings=Cannot create settings file
|
||||
EclipseSettingsWriter.errorwritingsettings=Error writing settings file
|
||||
EclipseSettingsWriter.usingdefaults=Not writing settings - defaults suffice
|
||||
|
||||
EclipseProjectWriter.notafile=Not adding a file link to {0}; it is not a file
|
||||
|
||||
EclipseCleanMojo.failedtodelete=Failed to delete {0} file: {0}
|
||||
EclipseCleanMojo.nofilefound=No {0} file found
|
||||
EclipseCleanMojo.deletingFile=Deleting file: {0}
|
||||
EclipseCleanMojo.deletingDirectory=Deleting directory: {0}
|
||||
|
||||
EclipseOSGiManifestWriter.nomanifestfile=The references manifest file doesn't exist, plugin dependencies will not be updated: {0}
|
||||
|
||||
Rad6LibCopier.cantdeletefile=Failed to delete file: {0}
|
||||
|
||||
MyEclipseSpringBeansWriter.baseDirDoesNotExist=The (basedir) path declared in the project's dependencies doesn't exist: {0}
|
||||
|
||||
EclipseToMavenMojo.eclipseDirectoryPrompt=Eclipse directory?
|
||||
EclipseToMavenMojo.errorreadingfromstandardinput=Unable to read from standard input
|
||||
EclipseToMavenMojo.directoydoesnotexist=Directory {0} doesn't exists
|
||||
EclipseToMavenMojo.plugindirectorydoesnotexist=Plugin directory {0} doesn't exists
|
||||
EclipseToMavenMojo.remoterepositorydeployto=Will deploy artifacts to remote repository {0}
|
||||
EclipseToMavenMojo.processingfile=Processing file {0}
|
||||
EclipseToMavenMojo.processingplugin=Processing {0} of {1}
|
||||
EclipseToMavenMojo.skippingfile=Skipping file {0}
|
||||
EclipseToMavenMojo.unabletoresolveversionrange=Unable to resolve version range for dependency {0} in project {1}
|
||||
EclipseToMavenMojo.unabletoaccessjar=Unable to access jar {0}
|
||||
EclipseToMavenMojo.plugindoesnothavemanifest=Plugin {0} does not have a manifest; skipping..
|
||||
EclipseToMavenMojo.unabletoreadbundlefrommanifest=Unable to read bundle name/version from manifest, skipping...
|
||||
EclipseToMavenMojo.errorprocessingplugin=Error processing plugin {0}
|
||||
EclipseToMavenMojo.errorwritingtemporarypom=Error writing temporary pom file: {0}
|
||||
EclipseToMavenMojo.errordeployartifacttorepository=Unable to deploy artifact to repository.
|
||||
EclipseToMavenMojo.errorinstallartifacttorepository=Unable to install artifact to repository.
|
||||
EclipseToMavenMojo.errorgettingjarfileforplugin=Error getting the jar file for plugin {0}
|
||||
EclipseToMavenMojo.invalidsyntaxforrepository=Invalid syntax for repository.
|
||||
EclipseToMavenMojo.invalidremoterepositorysyntax=Invalid syntax for remote repository. Use "id::layout::url".
|
||||
EclipseToMavenMojo.cannotfindrepositorylayout=Cannot find repository layout: {0}
|
||||
EclipseToMavenMojo.missingversionforbundle=Missing version for bundle {0}, assuming any version > 0
|
||||
|
||||
AbstractIdeSupportMojo.sourcesnotavailable=\n Sources for some artifacts are not available.\n List of artifacts without a source archive:
|
||||
AbstractIdeSupportMojo.sourcesnotdownloaded=\n Sources for some artifacts are not available.\n Please run the same goal with the -DdownloadSources=true parameter in order to check remote repositories for sources.\n List of artifacts without a source archive:
|
||||
AbstractIdeSupportMojo.sourcesmissingitem=\n o {0}
|
||||
AbstractIdeSupportMojo.javadocnotavailable=\n Javadoc for some artifacts is not available.\n List of artifacts without a javadoc archive:
|
||||
AbstractIdeSupportMojo.javadocnotdownloaded=\n Javadoc for some artifacts is not available.\n Please run the same goal with the -DdownloadJavadocs=true parameter in order to check remote repositories for javadoc.\n List of artifacts without a javadoc archive:
|
||||
AbstractIdeSupportMojo.javadocmissingitem=\n o {0}
|
||||
AbstractIdeSupportMojo.artifactresolution=An error occurred during dependency resolution of the following artifact:\n {0}:{1}:{2}\nCaused by: {3}
|
||||
AbstractIdeSupportMojo.artifactdownload=An error occurred during dependency resolution.\n Failed to retrieve {0}:{1}-{2}\nCaused by: {3}
|
||||
AbstractIdeSupportMojo.unabletoparseversion={0}: unable to parse version '{1}' for dependency '{2}': {3}
|
||||
AbstractIdeSupportMojo.failedtocreatenotavailablemarkerfile=Error creating not available file {0}
|
||||
AbstractIdeSupportMojo.creatednotavailablemarkerfile=Not available marker file created: {0}
|
||||
AbstractIdeSupportMojo.unabletodeletenotavailablemarkerfile=Unable to delete marker file: {0}
|
||||
|
||||
IdeUtils.errorresolving=Error resolving {0} artifact. Artifact id: {1} (Message: {2})
|
||||
|
||||
RemoveCacheMojo.checking=Checking cache for not available markers
|
||||
RemoveCacheMojo.complete=Done
|
Loading…
Add table
Reference in a new issue