Removing obsolete tag after it was copied to /maven-plugins/tags in r744084
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@835695 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b5c0d648cf
commit
bd87ace3a9
11 changed files with 0 additions and 2313 deletions
|
@ -1,205 +0,0 @@
|
|||
|
||||
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.
|
||||
|
||||
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
${pom.name}
|
||||
Copyright (c) 2005 - 2009 The Apache Software Foundation
|
||||
|
||||
This product includes software developed by
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
This module is a Maven compiler which uses the Eclipse Java compiler which is
|
||||
used by the Tuscany SCA project build.
|
||||
|
||||
To build, from the top maven-eclipse-compiler 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 maven-eclipse-compiler 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
|
||||
|
||||
While running these will prompt you for the names fro the tag, release version etc.
|
||||
|
||||
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-eclipse-compiler-1.0</deploy.altRepository>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,301 +0,0 @@
|
|||
<?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-eclipse-compiler</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>Apache Tuscany Maven Eclipse Compiler Plugin</name>
|
||||
<version>1.0</version>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:http://svn.apache.org/repos/asf/tuscany/maven-plugins/tags/maven-eclipse-compiler-1.0</connection>
|
||||
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/tuscany/maven-plugins/tags/maven-eclipse-compiler-1.0</developerConnection>
|
||||
<url>scm:svn:https://svn.apache.org/repos/asf/tuscany/maven-plugins/tags/maven-eclipse-compiler-1.0</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>
|
||||
</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.codehaus.plexus</groupId>
|
||||
<artifactId>plexus-compiler-api</artifactId>
|
||||
<version>1.5.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jdt</groupId>
|
||||
<artifactId>core</artifactId>
|
||||
<version>3.3.0-v_771</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.eclipse.core</groupId>
|
||||
<artifactId>resources</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.eclipse.core</groupId>
|
||||
<artifactId>runtime</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.eclipse.core</groupId>
|
||||
<artifactId>filesystem</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.eclipse</groupId>
|
||||
<artifactId>text</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse</groupId>
|
||||
<artifactId>osgi</artifactId>
|
||||
<version>3.3.0-v20070530</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>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-release-plugin</artifactId>
|
||||
<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>
|
|
@ -1,195 +0,0 @@
|
|||
/*
|
||||
* 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.compiler;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
|
||||
import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
|
||||
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
|
||||
import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
|
||||
import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer;
|
||||
|
||||
/**
|
||||
* An implementation of INameEnvironment based on a ClassLoader.
|
||||
*
|
||||
* @version $Rev: $ $Date: $
|
||||
*/
|
||||
class ClassLoaderNameEnvironment implements INameEnvironment {
|
||||
private final static char fileSeparator = System.getProperty("file.separator").charAt(0);
|
||||
|
||||
private ClassLoader classLoader;
|
||||
private List<String> sourceLocations;
|
||||
private Map<String, File> sourceFiles;
|
||||
|
||||
ClassLoaderNameEnvironment(ClassLoader classLoader, List<String> sourceLocations) {
|
||||
this.classLoader = classLoader;
|
||||
this.sourceLocations = sourceLocations;
|
||||
sourceFiles = new HashMap<String, File>();
|
||||
}
|
||||
|
||||
public NameEnvironmentAnswer findType(char[][] compoundTypeName) {
|
||||
StringBuffer className = new StringBuffer();
|
||||
for (char[] name: compoundTypeName) {
|
||||
if (className.length() != 0) {
|
||||
className.append('.');
|
||||
}
|
||||
className.append(name);
|
||||
}
|
||||
return nameAnswer(className.toString());
|
||||
}
|
||||
|
||||
public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) {
|
||||
StringBuffer className = new StringBuffer();
|
||||
for (char[] name: packageName) {
|
||||
if (className.length() != 0) {
|
||||
className.append('.');
|
||||
}
|
||||
className.append(name);
|
||||
}
|
||||
if (className.length() != 0) {
|
||||
className.append('.');
|
||||
}
|
||||
className.append(typeName);
|
||||
return nameAnswer(className.toString());
|
||||
}
|
||||
|
||||
public boolean isPackage(char[][] parentPackageName, char[] packageName) {
|
||||
StringBuffer fullPackageName = new StringBuffer();
|
||||
if (parentPackageName != null) {
|
||||
for (char[] name: parentPackageName) {
|
||||
if (fullPackageName.length() != 0) {
|
||||
fullPackageName.append('.');
|
||||
}
|
||||
fullPackageName.append(name);
|
||||
}
|
||||
}
|
||||
if (fullPackageName.length() != 0) {
|
||||
fullPackageName.append('.');
|
||||
}
|
||||
fullPackageName.append(packageName);
|
||||
return isPackage(fullPackageName.toString());
|
||||
}
|
||||
|
||||
public void cleanup() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the source file for the given class name.
|
||||
*
|
||||
* @param className
|
||||
* @return
|
||||
*/
|
||||
private File sourceFile(String className) {
|
||||
File sourceFile = (File)sourceFiles.get(className);
|
||||
if (sourceFile != null) {
|
||||
return sourceFile;
|
||||
}
|
||||
String sourceName = className.replace('.', fileSeparator) + ".java";
|
||||
sourceFile = sourceFileInSourceLocations(sourceName);
|
||||
sourceFiles.put(className, sourceFile);
|
||||
return sourceFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the source file for the given source path relative to the source locations.
|
||||
*
|
||||
* @param className
|
||||
* @return
|
||||
*/
|
||||
private File sourceFileInSourceLocations(String relativePath) {
|
||||
for (String sourceLocation : sourceLocations) {
|
||||
File sourceFile = new File(sourceLocation, relativePath);
|
||||
if (sourceFile.exists()) {
|
||||
return sourceFile;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the given name is a package name.
|
||||
*
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
private boolean isPackage(String name) {
|
||||
if (sourceFile(name) != null) {
|
||||
return false;
|
||||
}
|
||||
String resourceName = '/' + name.replace('.', '/') + ".class";
|
||||
InputStream is = classLoader.getResourceAsStream(resourceName);
|
||||
if (is == null) {
|
||||
return true;
|
||||
} else {
|
||||
try {
|
||||
is.close();
|
||||
} catch (IOException e) {}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the NameAnswer for by the given class name.
|
||||
*
|
||||
* @param className
|
||||
* @return
|
||||
*/
|
||||
private NameEnvironmentAnswer nameAnswer(String className) {
|
||||
try {
|
||||
File sourceFile = sourceFile(className);
|
||||
if (sourceFile != null) {
|
||||
ICompilationUnit compilationUnit = new FileCompilationUnit(sourceFile.getAbsolutePath(), className);
|
||||
return new NameEnvironmentAnswer(compilationUnit, null);
|
||||
}
|
||||
|
||||
String resourceName = className.replace('.', '/') + ".class";
|
||||
InputStream is = classLoader.getResourceAsStream(resourceName);
|
||||
if (is == null) {
|
||||
return null;
|
||||
}
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
byte[] b = new byte[2048];
|
||||
for (;;) {
|
||||
int n = is.read(b);
|
||||
if (n <= 0) {
|
||||
break;
|
||||
}
|
||||
bos.write(b, 0, n);
|
||||
}
|
||||
byte[] classBytes = bos.toByteArray();
|
||||
|
||||
ClassFileReader classFileReader = new ClassFileReader(classBytes, className.toCharArray(), true);
|
||||
return new NameEnvironmentAnswer(classFileReader, null);
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
} catch (ClassFormatException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,114 +0,0 @@
|
|||
/*
|
||||
* 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.compiler;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import org.codehaus.plexus.compiler.CompilerError;
|
||||
import org.eclipse.jdt.core.compiler.IProblem;
|
||||
import org.eclipse.jdt.internal.compiler.ClassFile;
|
||||
import org.eclipse.jdt.internal.compiler.CompilationResult;
|
||||
import org.eclipse.jdt.internal.compiler.ICompilerRequestor;
|
||||
|
||||
class CompilerRequestor implements ICompilerRequestor {
|
||||
private String outputDirectory;
|
||||
private boolean showWarnings;
|
||||
private List<CompilerError> compilerErrors;
|
||||
|
||||
public CompilerRequestor(String outputDirectory, boolean showWarnings, List<CompilerError> compilerErrors) {
|
||||
this.outputDirectory = outputDirectory;
|
||||
this.showWarnings = showWarnings;
|
||||
this.compilerErrors = compilerErrors;
|
||||
}
|
||||
|
||||
public void acceptResult(CompilationResult result) {
|
||||
boolean hasErrors = false;
|
||||
if (result.hasProblems()) {
|
||||
|
||||
// Convert JDT IProblems into plexus CompilerErrors
|
||||
for (IProblem problem: result.getProblems()) {
|
||||
if (problem.isWarning()) {
|
||||
if (showWarnings) {
|
||||
compilerErrors.add(new CompilerError(new String(problem.getOriginatingFileName()),
|
||||
false,
|
||||
problem.getSourceLineNumber(),
|
||||
problem.getSourceStart(),
|
||||
problem.getSourceLineNumber(),
|
||||
problem.getSourceEnd(),
|
||||
problem.getMessage()));
|
||||
}
|
||||
|
||||
} else if (problem.isError()) {
|
||||
hasErrors = true;
|
||||
compilerErrors.add(new CompilerError(new String(problem.getOriginatingFileName()),
|
||||
true,
|
||||
problem.getSourceLineNumber(),
|
||||
problem.getSourceStart(),
|
||||
problem.getSourceLineNumber(),
|
||||
problem.getSourceEnd(),
|
||||
problem.getMessage()));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Write the class files
|
||||
if (!hasErrors) {
|
||||
ClassFile[] classFiles = result.getClassFiles();
|
||||
for (ClassFile classFile: classFiles) {
|
||||
|
||||
// Create file and parent directories
|
||||
StringBuffer className = new StringBuffer();
|
||||
for (char[] name: classFile.getCompoundName()) {
|
||||
if (className.length() != 0) {
|
||||
className.append('.');
|
||||
}
|
||||
className.append(name);
|
||||
}
|
||||
File file = new File(outputDirectory, className.toString().replace('.', '/') + ".class");
|
||||
if (!file.getParentFile().exists()) {
|
||||
file.getParentFile().mkdirs();
|
||||
}
|
||||
|
||||
// Write class file contents
|
||||
FileOutputStream fos = null;
|
||||
try {
|
||||
fos = new FileOutputStream(file);
|
||||
fos.write(classFile.getBytes());
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
} finally {
|
||||
if (fos != null) {
|
||||
try {
|
||||
fos.close();
|
||||
} catch (IOException e) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,88 +0,0 @@
|
|||
/*
|
||||
* 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.compiler;
|
||||
|
||||
import java.io.CharArrayWriter;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
|
||||
|
||||
/**
|
||||
* An implementation of ICompilationUnit that wraps a File.
|
||||
*
|
||||
* @version $Rev: $ $Date: $
|
||||
*/
|
||||
class FileCompilationUnit implements ICompilationUnit {
|
||||
private final static char fileSeparator = System.getProperty("file.separator").charAt(0);
|
||||
private String className;
|
||||
private String sourceFile;
|
||||
|
||||
FileCompilationUnit(String sourceFile, String className) {
|
||||
this.className = className;
|
||||
this.sourceFile = sourceFile;
|
||||
}
|
||||
|
||||
public char[] getContents() {
|
||||
try {
|
||||
InputStreamReader reader = new InputStreamReader(new FileInputStream(sourceFile));
|
||||
CharArrayWriter writer = new CharArrayWriter();
|
||||
char[] b = new char[2048];
|
||||
for (;;) {
|
||||
int n = reader.read(b);
|
||||
if (n <= 0) {
|
||||
break;
|
||||
}
|
||||
writer.write(b, 0, n);
|
||||
}
|
||||
return writer.toCharArray();
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public char[] getFileName() {
|
||||
return (className.replace('.', fileSeparator) + ".java").toCharArray();
|
||||
}
|
||||
|
||||
public char[] getMainTypeName() {
|
||||
int dot = className.lastIndexOf('.');
|
||||
if (dot > 0) {
|
||||
return className.substring(dot + 1).toCharArray();
|
||||
}
|
||||
return className.toCharArray();
|
||||
}
|
||||
|
||||
public char[][] getPackageName() {
|
||||
StringTokenizer tokens = new StringTokenizer(className, ".");
|
||||
char[][] packageName = new char[tokens.countTokens() - 1][];
|
||||
for (int i = 0; i < packageName.length; i++) {
|
||||
String token = tokens.nextToken();
|
||||
packageName[i] = token.toCharArray();
|
||||
}
|
||||
return packageName;
|
||||
}
|
||||
}
|
|
@ -1,212 +0,0 @@
|
|||
/*
|
||||
* 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.compiler;
|
||||
|
||||
import static org.codehaus.plexus.compiler.CompilerOutputStyle.ONE_OUTPUT_FILE_PER_INPUT_FILE;
|
||||
import static org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies.proceedWithAllProblems;
|
||||
import static org.eclipse.jdt.internal.compiler.impl.CompilerOptions.GENERATE;
|
||||
import static org.eclipse.jdt.internal.compiler.impl.CompilerOptions.IGNORE;
|
||||
import static org.eclipse.jdt.internal.compiler.impl.CompilerOptions.OPTION_Encoding;
|
||||
import static org.eclipse.jdt.internal.compiler.impl.CompilerOptions.OPTION_LineNumberAttribute;
|
||||
import static org.eclipse.jdt.internal.compiler.impl.CompilerOptions.OPTION_LocalVariableAttribute;
|
||||
import static org.eclipse.jdt.internal.compiler.impl.CompilerOptions.OPTION_ReportDeprecation;
|
||||
import static org.eclipse.jdt.internal.compiler.impl.CompilerOptions.OPTION_Source;
|
||||
import static org.eclipse.jdt.internal.compiler.impl.CompilerOptions.OPTION_SourceFileAttribute;
|
||||
import static org.eclipse.jdt.internal.compiler.impl.CompilerOptions.OPTION_TargetPlatform;
|
||||
import static org.eclipse.jdt.internal.compiler.impl.CompilerOptions.WARNING;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.tuscany.maven.compiler.osgi.BundleResolver;
|
||||
import org.apache.tuscany.maven.compiler.osgi.BundleUtil;
|
||||
import org.codehaus.plexus.compiler.AbstractCompiler;
|
||||
import org.codehaus.plexus.compiler.CompilerConfiguration;
|
||||
import org.codehaus.plexus.compiler.CompilerError;
|
||||
import org.codehaus.plexus.compiler.CompilerException;
|
||||
import org.eclipse.jdt.internal.compiler.Compiler;
|
||||
import org.eclipse.jdt.internal.compiler.ICompilerRequestor;
|
||||
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
|
||||
import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
|
||||
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
|
||||
import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
|
||||
import org.eclipse.osgi.service.resolver.BundleDescription;
|
||||
import org.osgi.framework.BundleException;
|
||||
|
||||
/**
|
||||
* A custom Plexus Java compiler plugin that uses the Eclipse compiler.
|
||||
*
|
||||
* @version $Rev: $ $Date: $
|
||||
*/
|
||||
public class JavaCompiler extends AbstractCompiler {
|
||||
|
||||
public JavaCompiler() {
|
||||
super(ONE_OUTPUT_FILE_PER_INPUT_FILE, ".java", ".class", null);
|
||||
}
|
||||
|
||||
public List<CompilerError> compile(CompilerConfiguration configuration) throws CompilerException {
|
||||
BundleResolver stateController = new BundleResolver(getLogger());
|
||||
|
||||
getLogger().info("Invoking Tuscany Eclipse JDT compiler");
|
||||
|
||||
List<URL> urls = new ArrayList<URL>();
|
||||
try {
|
||||
for (String entry : (List<String>)configuration.getClasspathEntries()) {
|
||||
urls.add(new File(entry).toURI().toURL());
|
||||
}
|
||||
} catch (MalformedURLException e) {
|
||||
throw new CompilerException(e.getMessage(), e);
|
||||
}
|
||||
|
||||
ClassLoader classLoader = new URLClassLoader(urls.toArray(new URL[urls.size()]));
|
||||
|
||||
// Determine compiler configuration
|
||||
Map<String, String> settings = new HashMap<String, String>();
|
||||
String sourceVersion = configuration.getSourceVersion();
|
||||
if (sourceVersion != null && sourceVersion.length() != 0) {
|
||||
settings.put(OPTION_Source, sourceVersion);
|
||||
}
|
||||
String targetVersion = configuration.getTargetVersion();
|
||||
if (targetVersion != null && targetVersion.length() != 0) {
|
||||
settings.put(OPTION_TargetPlatform, targetVersion);
|
||||
}
|
||||
settings.put(OPTION_LineNumberAttribute, GENERATE);
|
||||
settings.put(OPTION_SourceFileAttribute, GENERATE);
|
||||
if (configuration.isDebug()) {
|
||||
settings.put(OPTION_LocalVariableAttribute, GENERATE);
|
||||
}
|
||||
if (configuration.getSourceEncoding() != null && !(configuration.getSourceEncoding().length() == 0)) {
|
||||
settings.put(OPTION_Encoding, configuration.getSourceEncoding());
|
||||
}
|
||||
if (configuration.isShowDeprecation()) {
|
||||
settings.put(OPTION_ReportDeprecation, WARNING);
|
||||
} else {
|
||||
settings.put(OPTION_ReportDeprecation, IGNORE);
|
||||
}
|
||||
|
||||
// Create a compiler
|
||||
List<CompilerError> compilerErrors = new ArrayList<CompilerError>();
|
||||
INameEnvironment nameEnvironment =
|
||||
new ClassLoaderNameEnvironment(classLoader, configuration.getSourceLocations());
|
||||
ICompilerRequestor requestor =
|
||||
new CompilerRequestor(configuration.getOutputLocation(), configuration.isShowWarnings(), compilerErrors);
|
||||
Compiler compiler =
|
||||
new Compiler(nameEnvironment, proceedWithAllProblems(), new CompilerOptions(settings), requestor,
|
||||
new DefaultProblemFactory(Locale.getDefault()));
|
||||
|
||||
// Create compilation units for the source files
|
||||
List<FileCompilationUnit> compilationUnits = new ArrayList<FileCompilationUnit>();
|
||||
|
||||
// Go over the input source locations
|
||||
List<String> sourceLocations = (List<String>)configuration.getSourceLocations();
|
||||
for (String sourceLocation : sourceLocations) {
|
||||
|
||||
// Exclude nested source locations
|
||||
List<String> excludeLocations = new ArrayList<String>();
|
||||
for (String nestedLocation : sourceLocations) {
|
||||
if (nestedLocation != sourceLocation && nestedLocation.startsWith(sourceLocation)) {
|
||||
excludeLocations.add(nestedLocation);
|
||||
}
|
||||
}
|
||||
|
||||
// List source files in each source location
|
||||
for (String sourceFile : (Set<String>)getSourceFilesForSourceRoot(configuration, sourceLocation)) {
|
||||
|
||||
// Exclude files from excluded nested locations
|
||||
boolean excluded = false;
|
||||
for (String excludeLocation : excludeLocations) {
|
||||
if (sourceFile.startsWith(excludeLocation)) {
|
||||
excluded = true;
|
||||
}
|
||||
}
|
||||
if (!excluded) {
|
||||
|
||||
// Create a compilation unit for the source file
|
||||
FileCompilationUnit compilationUnit =
|
||||
new FileCompilationUnit(sourceFile, makeClassName(sourceFile, sourceLocation));
|
||||
compilationUnits.add(compilationUnit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Compile all the compilation units
|
||||
getLogger().info("Compiling " + compilationUnits.size() + " to " + configuration.getOutputLocation());
|
||||
compiler.compile((ICompilationUnit[])compilationUnits.toArray(new ICompilationUnit[compilationUnits.size()]));
|
||||
|
||||
// getLogger().info(configuration.getCustomCompilerArguments().toString());
|
||||
boolean osgi = "true".equals(configuration.getCustomCompilerArguments().get("-osgi"));
|
||||
File proj = new File(configuration.getOutputLocation());
|
||||
|
||||
String symbol = null;
|
||||
try {
|
||||
// Don't trigger the resolution for test-compile
|
||||
if (!"test-classes".equals(proj.getName())) {
|
||||
symbol = BundleUtil.getBundleSymbolicName(proj);
|
||||
}
|
||||
} catch (IOException e1) {
|
||||
symbol = null;
|
||||
}
|
||||
|
||||
if (osgi && symbol != null) {
|
||||
getLogger().info("Resolving OSGi bundle: "+symbol);
|
||||
for (String entry : (List<String>)configuration.getClasspathEntries()) {
|
||||
try {
|
||||
File cp = new File(entry);
|
||||
if (cp.exists()) {
|
||||
stateController.addBundle(cp);
|
||||
}
|
||||
} catch (BundleException e) {
|
||||
getLogger().error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
stateController.resolveState();
|
||||
BundleDescription b = stateController.getBundleDescription(proj);
|
||||
if (b != null) {
|
||||
try {
|
||||
stateController.assertResolved(b);
|
||||
getLogger().info("OSGi bundle is resolved: " + b.getSymbolicName());
|
||||
} catch (BundleException e) {
|
||||
stateController.analyzeErrors(b);
|
||||
if(getLogger().isDebugEnabled()) {
|
||||
getLogger().debug(stateController.reportErrors(b));
|
||||
}
|
||||
// FIXME: For now, only a warning is reported
|
||||
// throw new CompilerException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return compilerErrors;
|
||||
}
|
||||
|
||||
public String[] createCommandLine(CompilerConfiguration config) throws CompilerException {
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -1,490 +0,0 @@
|
|||
/*
|
||||
* 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.compiler.osgi;
|
||||
|
||||
import static org.eclipse.osgi.service.resolver.ResolverError.IMPORT_PACKAGE_USES_CONFLICT;
|
||||
import static org.eclipse.osgi.service.resolver.ResolverError.MISSING_FRAGMENT_HOST;
|
||||
import static org.eclipse.osgi.service.resolver.ResolverError.MISSING_IMPORT_PACKAGE;
|
||||
import static org.eclipse.osgi.service.resolver.ResolverError.MISSING_REQUIRE_BUNDLE;
|
||||
import static org.eclipse.osgi.service.resolver.ResolverError.REQUIRE_BUNDLE_USES_CONFLICT;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Dictionary;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.jar.Attributes;
|
||||
import java.util.jar.Manifest;
|
||||
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
import org.eclipse.osgi.service.resolver.BundleDescription;
|
||||
import org.eclipse.osgi.service.resolver.BundleSpecification;
|
||||
import org.eclipse.osgi.service.resolver.ExportPackageDescription;
|
||||
import org.eclipse.osgi.service.resolver.HostSpecification;
|
||||
import org.eclipse.osgi.service.resolver.ImportPackageSpecification;
|
||||
import org.eclipse.osgi.service.resolver.ResolverError;
|
||||
import org.eclipse.osgi.service.resolver.State;
|
||||
import org.eclipse.osgi.service.resolver.StateObjectFactory;
|
||||
import org.eclipse.osgi.service.resolver.VersionConstraint;
|
||||
import org.osgi.framework.Bundle;
|
||||
import org.osgi.framework.BundleException;
|
||||
import org.osgi.framework.Constants;
|
||||
|
||||
public class BundleResolver {
|
||||
private static final String PROP_MAVEN_PROJECT = "MavenProject";
|
||||
private static final String PROP_MANIFEST = "BundleManifest";
|
||||
|
||||
private StateObjectFactory factory = StateObjectFactory.defaultFactory;
|
||||
private State state;
|
||||
private long id = 0;
|
||||
private Logger logger;
|
||||
|
||||
public static BundleDescription[] getDependentBundles(BundleDescription root) {
|
||||
if (root == null)
|
||||
return new BundleDescription[0];
|
||||
BundleDescription[] imported = getImportedBundles(root);
|
||||
BundleDescription[] required = getRequiredBundles(root);
|
||||
BundleDescription[] dependents = new BundleDescription[imported.length + required.length];
|
||||
System.arraycopy(imported, 0, dependents, 0, imported.length);
|
||||
System.arraycopy(required, 0, dependents, imported.length, required.length);
|
||||
return dependents;
|
||||
}
|
||||
|
||||
public static BundleDescription[] getImportedBundles(BundleDescription root) {
|
||||
if (root == null)
|
||||
return new BundleDescription[0];
|
||||
ExportPackageDescription[] packages = root.getResolvedImports();
|
||||
List<BundleDescription> resolvedImports = new ArrayList<BundleDescription>(packages.length);
|
||||
for (int i = 0; i < packages.length; i++)
|
||||
if (!root.getLocation().equals(packages[i].getExporter().getLocation()) && !resolvedImports
|
||||
.contains(packages[i].getExporter()))
|
||||
resolvedImports.add(packages[i].getExporter());
|
||||
return (BundleDescription[])resolvedImports.toArray(new BundleDescription[resolvedImports.size()]);
|
||||
}
|
||||
|
||||
public static BundleDescription[] getRequiredBundles(BundleDescription root) {
|
||||
if (root == null)
|
||||
return new BundleDescription[0];
|
||||
return root.getResolvedRequires();
|
||||
}
|
||||
|
||||
public BundleResolver(Logger logger) {
|
||||
this.logger = logger;
|
||||
this.state = factory.createState(true);
|
||||
Properties props = new Properties();
|
||||
props.putAll(System.getProperties());
|
||||
BundleUtil.loadVMProfile(props);
|
||||
state.setPlatformProperties(props);
|
||||
URL url = Bundle.class.getProtectionDomain().getCodeSource().getLocation();
|
||||
|
||||
File osgi = toFile(url);
|
||||
try {
|
||||
addBundle(osgi);
|
||||
} catch (BundleException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private long getNextId() {
|
||||
return ++id;
|
||||
}
|
||||
|
||||
public BundleDescription addBundle(File bundleLocation) throws BundleException {
|
||||
return addBundle(bundleLocation, false);
|
||||
}
|
||||
|
||||
public BundleDescription addBundle(File bundleLocation, boolean override) throws BundleException {
|
||||
if (bundleLocation == null || !bundleLocation.exists())
|
||||
throw new IllegalArgumentException("bundleLocation not found: " + bundleLocation);
|
||||
Dictionary manifest = loadManifestAttributes(bundleLocation);
|
||||
if (manifest == null) {
|
||||
// throw new BundleException("manifest not found in " + bundleLocation);
|
||||
return null;
|
||||
}
|
||||
return addBundle(manifest, bundleLocation, override);
|
||||
}
|
||||
|
||||
public BundleDescription addBundle(File manifestLocation, File bundleLocation, boolean override)
|
||||
throws BundleException {
|
||||
if (bundleLocation == null || !bundleLocation.exists())
|
||||
throw new IllegalArgumentException("bundleLocation not found: " + bundleLocation);
|
||||
Dictionary manifest = loadManifestAttributes(manifestLocation);
|
||||
if (manifest == null)
|
||||
throw new IllegalArgumentException("manifest not found in " + manifestLocation);
|
||||
return addBundle(manifest, bundleLocation, override);
|
||||
}
|
||||
|
||||
private Dictionary loadManifestAttributes(File bundleLocation) {
|
||||
Manifest m = loadManifest(bundleLocation);
|
||||
if (m == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return manifestToProperties(m.getMainAttributes());
|
||||
}
|
||||
|
||||
public Manifest loadManifest(File bundleLocation) {
|
||||
try {
|
||||
return BundleUtil.getManifest(bundleLocation);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private Properties manifestToProperties(Attributes d) {
|
||||
Iterator iter = d.keySet().iterator();
|
||||
Properties result = new Properties();
|
||||
while (iter.hasNext()) {
|
||||
Attributes.Name key = (Attributes.Name)iter.next();
|
||||
result.put(key.toString(), d.get(key));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private BundleDescription addBundle(Dictionary enhancedManifest, File bundleLocation, boolean override)
|
||||
throws BundleException {
|
||||
|
||||
BundleDescription descriptor =
|
||||
factory.createBundleDescription(state, enhancedManifest, bundleLocation.getAbsolutePath(), getNextId());
|
||||
|
||||
setUserProperty(descriptor, PROP_MANIFEST, enhancedManifest);
|
||||
if (override) {
|
||||
BundleDescription[] conflicts = state.getBundles(descriptor.getSymbolicName());
|
||||
if (conflicts != null) {
|
||||
for (BundleDescription conflict : conflicts) {
|
||||
state.removeBundle(conflict);
|
||||
logger
|
||||
.warn(conflict.toString() + " has been replaced by another bundle with the same symbolic name "
|
||||
+ descriptor.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
state.addBundle(descriptor);
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
public BundleDescription getResolvedBundle(String bundleId) {
|
||||
BundleDescription[] description = state.getBundles(bundleId);
|
||||
if (description == null)
|
||||
return null;
|
||||
for (int i = 0; i < description.length; i++) {
|
||||
if (description[i].isResolved())
|
||||
return description[i];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void resolveState() {
|
||||
state.resolve(false);
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
StringBuilder sb = new StringBuilder("Resolved OSGi state\n");
|
||||
for (BundleDescription bundle : state.getBundles()) {
|
||||
if (!bundle.isResolved()) {
|
||||
sb.append("[X] ");
|
||||
} else {
|
||||
sb.append("[V] ");
|
||||
}
|
||||
sb.append(bundle).append(": (").append(bundle.getLocation());
|
||||
sb.append(")\n");
|
||||
for (ResolverError error : state.getResolverErrors(bundle)) {
|
||||
sb.append(" ").append(error.toString()).append('\n');
|
||||
}
|
||||
}
|
||||
logger.debug(sb.toString());
|
||||
}
|
||||
}
|
||||
|
||||
public State getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public BundleDescription[] getBundles() {
|
||||
return state.getBundles();
|
||||
}
|
||||
|
||||
public ResolverError[] getResolverErrors(BundleDescription bundle) {
|
||||
Set<ResolverError> errors = new LinkedHashSet<ResolverError>();
|
||||
getRelevantErrors(errors, bundle);
|
||||
return (ResolverError[])errors.toArray(new ResolverError[errors.size()]);
|
||||
}
|
||||
|
||||
private void getRelevantErrors(Set<ResolverError> errors, BundleDescription bundle) {
|
||||
ResolverError[] bundleErrors = state.getResolverErrors(bundle);
|
||||
for (int j = 0; j < bundleErrors.length; j++) {
|
||||
ResolverError error = bundleErrors[j];
|
||||
errors.add(error);
|
||||
|
||||
VersionConstraint constraint = error.getUnsatisfiedConstraint();
|
||||
if (constraint instanceof BundleSpecification || constraint instanceof HostSpecification) {
|
||||
BundleDescription[] requiredBundles = state.getBundles(constraint.getName());
|
||||
for (int i = 0; i < requiredBundles.length; i++) {
|
||||
getRelevantErrors(errors, requiredBundles[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void logError(BundleDescription bundle, int level, Object object) {
|
||||
StringBuffer msg = new StringBuffer();
|
||||
for (int i = 0; i < level; i++) {
|
||||
msg.append("--");
|
||||
}
|
||||
msg.append("> [").append(bundle.getSymbolicName()).append("] ");
|
||||
msg.append(object);
|
||||
logger.error(msg.toString());
|
||||
}
|
||||
|
||||
public void analyzeErrors(BundleDescription bundle) {
|
||||
analyzeErrors(bundle, new HashSet<BundleDescription>(), 1);
|
||||
}
|
||||
|
||||
private void analyzeErrors(BundleDescription bundle, Set<BundleDescription> bundles, int level) {
|
||||
if (bundles.contains(bundle)) {
|
||||
return;
|
||||
}
|
||||
bundles.add(bundle);
|
||||
ResolverError[] errors = state.getResolverErrors(bundle);
|
||||
for (ResolverError error : errors) {
|
||||
logError(bundle, level, error);
|
||||
VersionConstraint constraint = error.getUnsatisfiedConstraint();
|
||||
switch (error.getType()) {
|
||||
case MISSING_IMPORT_PACKAGE:
|
||||
ImportPackageSpecification pkgSpec = (ImportPackageSpecification)constraint;
|
||||
for (BundleDescription b : getBundles()) {
|
||||
for (ExportPackageDescription pkg : b.getExportPackages()) {
|
||||
if (pkg.getName().equals(pkgSpec.getName())) {
|
||||
if (pkgSpec.getVersionRange().isIncluded(pkg.getVersion())) {
|
||||
if (!pkg.getExporter().isResolved()) {
|
||||
logError(b, level, "Bundle unresolved: " + pkg);
|
||||
analyzeErrors(pkg.getExporter(), bundles, level + 1);
|
||||
}
|
||||
} else {
|
||||
logError(b, level, "Version mismatch: " + pkgSpec + " " + pkg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MISSING_REQUIRE_BUNDLE:
|
||||
case MISSING_FRAGMENT_HOST:
|
||||
// BundleSpecification bundleSpec = (BundleSpecification)constraint;
|
||||
for (BundleDescription b : getBundles()) {
|
||||
if (b == bundle) {
|
||||
continue;
|
||||
}
|
||||
if (b.getSymbolicName().equals(constraint.getName())) {
|
||||
if (constraint.getVersionRange().isIncluded(b.getVersion())) {
|
||||
// There must be something wrong in the bundle
|
||||
analyzeErrors(b, bundles, level);
|
||||
} else {
|
||||
logError(bundle, level, "Version mismatch: " + constraint + " " + b);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case IMPORT_PACKAGE_USES_CONFLICT:
|
||||
case REQUIRE_BUNDLE_USES_CONFLICT:
|
||||
default:
|
||||
logger.error(reportErrors(bundle));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public Set<ResolverError> getAllErrors() {
|
||||
BundleDescription[] bundles = state.getBundles();
|
||||
Set<ResolverError> errors = new LinkedHashSet<ResolverError>();
|
||||
for (int i = 0; i < bundles.length; i++) {
|
||||
BundleDescription bundle = bundles[i];
|
||||
ResolverError[] bundleErrors = state.getResolverErrors(bundle);
|
||||
if (bundleErrors != null) {
|
||||
errors.addAll(Arrays.asList(bundleErrors));
|
||||
}
|
||||
}
|
||||
return errors;
|
||||
}
|
||||
|
||||
public List<BundleDescription> getDependencies(BundleDescription desc) {
|
||||
Set<Long> bundleIds = new LinkedHashSet<Long>();
|
||||
addBundleAndDependencies(desc, bundleIds, true);
|
||||
List<BundleDescription> dependencies = new ArrayList<BundleDescription>();
|
||||
for (long bundleId : bundleIds) {
|
||||
if (desc.getBundleId() != bundleId) {
|
||||
BundleDescription dependency = state.getBundle(bundleId);
|
||||
BundleDescription supplier = dependency.getSupplier().getSupplier();
|
||||
HostSpecification host = supplier.getHost();
|
||||
if (host == null || !desc.equals(host.getSupplier())) {
|
||||
dependencies.add(dependency);
|
||||
}
|
||||
}
|
||||
}
|
||||
return dependencies;
|
||||
}
|
||||
|
||||
/**
|
||||
* Code below is copy&paste from org.eclipse.pde.internal.core.DependencyManager
|
||||
* which seems to calculate runtime dependencies. In particular, it adds
|
||||
* fragments' dependencies to the host bundle (see TychoTest#testFragment unit test).
|
||||
* This may or may not cause problems...
|
||||
*
|
||||
* RequiredPluginsClasspathContainer#computePluginEntries has the logic to
|
||||
* calculate compile-time dependencies in IDE.
|
||||
*
|
||||
* TODO find the code used by PDE/Build
|
||||
*/
|
||||
private static void addBundleAndDependencies(BundleDescription desc, Set<Long> bundleIds, boolean includeOptional) {
|
||||
if (desc != null && bundleIds.add(new Long(desc.getBundleId()))) {
|
||||
BundleSpecification[] required = desc.getRequiredBundles();
|
||||
for (int i = 0; i < required.length; i++) {
|
||||
if (includeOptional || !required[i].isOptional())
|
||||
addBundleAndDependencies((BundleDescription)required[i].getSupplier(), bundleIds, includeOptional);
|
||||
}
|
||||
ImportPackageSpecification[] importedPkgs = desc.getImportPackages();
|
||||
for (int i = 0; i < importedPkgs.length; i++) {
|
||||
ExportPackageDescription exporter = (ExportPackageDescription)importedPkgs[i].getSupplier();
|
||||
// Continue if the Imported Package is unresolved of the package is optional and don't want optional packages
|
||||
if (exporter == null || (!includeOptional && Constants.RESOLUTION_OPTIONAL.equals(importedPkgs[i]
|
||||
.getDirective(Constants.RESOLUTION_DIRECTIVE))))
|
||||
continue;
|
||||
addBundleAndDependencies(exporter.getExporter(), bundleIds, includeOptional);
|
||||
}
|
||||
BundleDescription[] fragments = desc.getFragments();
|
||||
for (int i = 0; i < fragments.length; i++) {
|
||||
if (!fragments[i].isResolved())
|
||||
continue;
|
||||
String id = fragments[i].getSymbolicName();
|
||||
if (!"org.eclipse.ui.workbench.compatibility".equals(id)) //$NON-NLS-1$
|
||||
addBundleAndDependencies(fragments[i], bundleIds, includeOptional);
|
||||
}
|
||||
HostSpecification host = desc.getHost();
|
||||
if (host != null)
|
||||
addBundleAndDependencies((BundleDescription)host.getSupplier(), bundleIds, includeOptional);
|
||||
}
|
||||
}
|
||||
|
||||
public BundleDescription getBundleDescription(MavenProject project) {
|
||||
String location = project.getFile().getParentFile().getAbsolutePath();
|
||||
return state.getBundleByLocation(location);
|
||||
}
|
||||
|
||||
public BundleDescription getBundleDescription(File location) {
|
||||
String absolutePath = location.getAbsolutePath();
|
||||
return state.getBundleByLocation(absolutePath);
|
||||
}
|
||||
|
||||
private static void setUserProperty(BundleDescription desc, String name, Object value) {
|
||||
Object userObject = desc.getUserObject();
|
||||
|
||||
if (userObject != null && !(userObject instanceof Map)) {
|
||||
throw new IllegalStateException("Unexpected user object " + desc.toString());
|
||||
}
|
||||
|
||||
Map props = (Map)userObject;
|
||||
if (props == null) {
|
||||
props = new HashMap();
|
||||
desc.setUserObject(props);
|
||||
}
|
||||
|
||||
props.put(name, value);
|
||||
}
|
||||
|
||||
private static Object getUserProperty(BundleDescription desc, String name) {
|
||||
Object userObject = desc.getUserObject();
|
||||
if (userObject instanceof Map) {
|
||||
return ((Map)userObject).get(name);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public MavenProject getMavenProject(BundleDescription desc) {
|
||||
return (MavenProject)getUserProperty(desc, PROP_MAVEN_PROJECT);
|
||||
}
|
||||
|
||||
public void assertResolved(BundleDescription desc) throws BundleException {
|
||||
if (!desc.isResolved()) {
|
||||
throw new BundleException("Bundle cannot be resolved: " + desc);
|
||||
}
|
||||
}
|
||||
|
||||
public String reportErrors(BundleDescription desc) {
|
||||
StringBuffer msg = new StringBuffer();
|
||||
msg.append("Bundle ").append(desc.getSymbolicName()).append(" cannot be resolved: \n");
|
||||
BundleDescription[] bundles = state.getBundles();
|
||||
int index = 0;
|
||||
for (BundleDescription b : bundles) {
|
||||
if (b.isResolved()) {
|
||||
continue;
|
||||
}
|
||||
ResolverError[] errors = state.getResolverErrors(b);
|
||||
if (errors.length > 0) {
|
||||
msg.append(" ").append("[").append(index++).append("] ").append(b.getSymbolicName()).append("\n");
|
||||
}
|
||||
for (int i = 0; i < errors.length; i++) {
|
||||
ResolverError error = errors[i];
|
||||
msg.append(" -->").append(error).append("\n");
|
||||
}
|
||||
}
|
||||
return msg.toString();
|
||||
}
|
||||
|
||||
public String getManifestAttribute(BundleDescription desc, String attr) {
|
||||
Dictionary mf = (Dictionary)getUserProperty(desc, PROP_MANIFEST);
|
||||
if (mf != null) {
|
||||
return (String)mf.get(attr);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static File toFile(URL url) {
|
||||
if (url.getProtocol().equals("file") == false) {
|
||||
return null;
|
||||
} else {
|
||||
String filename = url.getFile().replace('/', File.separatorChar).replace("%20", " ");
|
||||
return new File(filename);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
public static void main(String[] args) throws Exception {
|
||||
BundleResolver resolver = new BundleResolver(new ConsoleLogger(Logger.LEVEL_INFO, "tuscany"));
|
||||
|
||||
String home = System.getProperty("user.home");
|
||||
File jar =
|
||||
new File(new File(home),
|
||||
".m2/repository/org/apache/tuscany/sca/tuscany-sca-api/1.4-EQUINOX-SNAPSHOT/tuscany-sca-api-1.4-EQUINOX-SNAPSHOT.jar");
|
||||
BundleDescription bundle = resolver.addBundle(jar);
|
||||
resolver.resolveState();
|
||||
resolver.assertResolved(bundle);
|
||||
}
|
||||
*/
|
||||
}
|
|
@ -1,618 +0,0 @@
|
|||
/*
|
||||
* 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.compiler.osgi;
|
||||
|
||||
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.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.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
|
||||
import org.apache.maven.artifact.versioning.ArtifactVersion;
|
||||
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
||||
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 {
|
||||
|
||||
/**
|
||||
* 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 {
|
||||
if (!file.exists()) {
|
||||
return null;
|
||||
}
|
||||
String bundleName = null;
|
||||
if (file.isDirectory()) {
|
||||
File mf = new File(file, JarFile.MANIFEST_NAME);
|
||||
if (!mf.isFile()) {
|
||||
mf = new File(file, "../../" + JarFile.MANIFEST_NAME);
|
||||
}
|
||||
if (mf.isFile()) {
|
||||
Manifest manifest = new Manifest(new FileInputStream(mf));
|
||||
bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
|
||||
}
|
||||
} else {
|
||||
JarFile jar = new JarFile(file, false);
|
||||
Manifest manifest = jar.getManifest();
|
||||
bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
|
||||
jar.close();
|
||||
}
|
||||
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;
|
||||
String bundleName = null;
|
||||
if (file.isDirectory()) {
|
||||
File mf = new File(file, JarFile.MANIFEST_NAME);
|
||||
if (!mf.isFile()) {
|
||||
mf = new File(file, "../../" + JarFile.MANIFEST_NAME);
|
||||
}
|
||||
if (mf.isFile()) {
|
||||
manifest = new Manifest(new FileInputStream(mf));
|
||||
bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
|
||||
}
|
||||
} else {
|
||||
JarFile jar = new JarFile(file, false);
|
||||
manifest = jar.getManifest();
|
||||
bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
|
||||
jar.close();
|
||||
}
|
||||
if (bundleName != null) {
|
||||
return manifest;
|
||||
}
|
||||
|
||||
if (file.isFile()) {
|
||||
Set<File> jars = new HashSet<File>();
|
||||
jars.add(file);
|
||||
String name = file.getName();
|
||||
manifest = libraryManifest(jars, name, name, jarVersion(name), null);
|
||||
}
|
||||
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 {
|
||||
try {
|
||||
|
||||
// List exported packages and bundle classpath entries
|
||||
StringBuffer classpath = new StringBuffer();
|
||||
Set<String> exportedPackages = new HashSet<String>();
|
||||
for (File jarFile : jarFiles) {
|
||||
addPackages(jarFile, exportedPackages, version);
|
||||
if (dir != null) {
|
||||
classpath.append(dir).append("/");
|
||||
classpath.append(jarFile.getName());
|
||||
} else {
|
||||
classpath.append("\"external:");
|
||||
classpath.append(jarFile.getPath().replace(File.separatorChar, '/'));
|
||||
classpath.append("\"");
|
||||
}
|
||||
classpath.append(",");
|
||||
}
|
||||
|
||||
// Generate export-package and import-package declarations
|
||||
StringBuffer exports = new StringBuffer();
|
||||
StringBuffer imports = new StringBuffer();
|
||||
Set<String> importedPackages = new HashSet<String>();
|
||||
for (String export : exportedPackages) {
|
||||
|
||||
// Add export declaration
|
||||
exports.append(export);
|
||||
exports.append(',');
|
||||
|
||||
// Add corresponding import declaration
|
||||
String packageName = packageName(export);
|
||||
if (!importedPackages.contains(packageName)) {
|
||||
importedPackages.add(packageName);
|
||||
imports.append(packageName);
|
||||
imports.append(',');
|
||||
}
|
||||
}
|
||||
|
||||
// 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);
|
||||
attributes.putValue(DYNAMICIMPORT_PACKAGE, "*");
|
||||
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);
|
||||
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();
|
||||
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();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
private static void addExportedPackages(File file, Set<String> packages) throws IOException {
|
||||
if (!file.exists()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Read the export-package declaration and get a list of the packages available in a JAR
|
||||
Set<String> existingPackages = null;
|
||||
String exports = null;
|
||||
if (file.isDirectory()) {
|
||||
File mf = new File(file, "META-INF/MANIFEST.MF");
|
||||
if (mf.isFile()) {
|
||||
Manifest manifest = new Manifest(new FileInputStream(mf));
|
||||
exports = manifest.getMainAttributes().getValue(EXPORT_PACKAGE);
|
||||
}
|
||||
} else {
|
||||
JarFile jar = new JarFile(file, false);
|
||||
Manifest manifest = jar.getManifest();
|
||||
exports = manifest.getMainAttributes().getValue(EXPORT_PACKAGE);
|
||||
jar.close();
|
||||
existingPackages = new HashSet<String>();
|
||||
addAllPackages(file, existingPackages, "");
|
||||
}
|
||||
if (exports == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Parse the export-package declaration, and extract the individual packages
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
boolean q = false;
|
||||
for (int i = 0, n = exports.length(); i < n; i++) {
|
||||
char c = exports.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();
|
||||
if (existingPackages == null || existingPackages.contains(packageName(export))) {
|
||||
packages.add(stripExport(export));
|
||||
}
|
||||
buffer = new StringBuffer();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
buffer.append(c);
|
||||
}
|
||||
if (buffer.length() != 0) {
|
||||
|
||||
// Add the exported package to the set, after making sure it really exists in
|
||||
// the JAR
|
||||
String export = buffer.toString();
|
||||
if (existingPackages == null || existingPackages.contains(packageName(export))) {
|
||||
packages.add(stripExport(export));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* starting with -, then some digits, then . or - or _, then some digits again
|
||||
*
|
||||
*/
|
||||
private static Pattern pattern = Pattern.compile("-(\\d)+((\\.|-|_)(\\d)+)*");
|
||||
|
||||
/**
|
||||
* Returns the version number to use for the given JAR file.
|
||||
*
|
||||
* @param fileName
|
||||
* @return
|
||||
*/
|
||||
static String jarVersion(String fileName) {
|
||||
String name = fileName;
|
||||
int index = name.lastIndexOf('.');
|
||||
if (index != -1) {
|
||||
// Trim the extension
|
||||
name = name.substring(0, index);
|
||||
}
|
||||
|
||||
Matcher matcher = pattern.matcher(name);
|
||||
String version = "0.0.0";
|
||||
if (matcher.find()) {
|
||||
version = matcher.group();
|
||||
version = version.substring(1);
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the maven version into OSGi version
|
||||
* @param mavenVersion
|
||||
* @return
|
||||
*/
|
||||
static String osgiVersion(String mavenVersion) {
|
||||
ArtifactVersion ver = new DefaultArtifactVersion(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";
|
||||
|
||||
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 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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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 URL findInSystemBundle(String entry) {
|
||||
ClassLoader loader = BundleUtil.class.getClassLoader();
|
||||
return loader == null ? ClassLoader.getSystemResource(entry) : loader.getResource(entry);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
<?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.
|
||||
-->
|
||||
<component-set>
|
||||
<components>
|
||||
<component>
|
||||
<role>org.codehaus.plexus.compiler.Compiler</role>
|
||||
<role-hint>tuscany-eclipse</role-hint>
|
||||
<implementation>org.apache.tuscany.maven.compiler.JavaCompiler</implementation>
|
||||
</component>
|
||||
</components>
|
||||
</component-set>
|
Loading…
Reference in a new issue