Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better build and installation support #209

Open
wants to merge 55 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
b61eaaa
use proper bundle dependencies instead of raw package
yanntm Apr 6, 2020
1ddd312
change paths to parent pom
yanntm Apr 13, 2020
4886f3f
refactoring parent pom id
yanntm Apr 13, 2020
11cf7d8
a pom for the update site
yanntm Apr 13, 2020
b91070e
update to match main ITSTools parent pom configuration
yanntm Apr 13, 2020
b848783
set versions to be SNAPSHOT based in pom
yanntm Apr 13, 2020
480fb6c
patching Manifest files for maven version build
yanntm Apr 13, 2020
f405787
revised versioning
yanntm Apr 13, 2020
62fa4ab
more version poke
yanntm Apr 13, 2020
014c16f
feature for maven
yanntm Apr 13, 2020
6753016
preparing travis build
yanntm Apr 13, 2020
9842b14
.yml typos
yanntm Apr 13, 2020
f36b16e
.yml typos
yanntm Apr 13, 2020
713cf5d
patch travis path
yanntm Apr 13, 2020
ab586bd
switch to plugin (was fragment) + other changes
yanntm Apr 13, 2020
e7b7148
use repos identified by @OlivierBarbier
yanntm Apr 20, 2020
214a621
resolve on our newly built artifacts
yanntm Apr 20, 2020
c1aab36
new repo for metrics dependency
yanntm Apr 20, 2020
37aa04c
this project should be a fragment
yanntm Apr 20, 2020
73d37cf
add missing dependency
yanntm Apr 20, 2020
791268b
root project just to ease checkout
yanntm Apr 20, 2020
45c5fc6
problems seem related to java version
yanntm Apr 20, 2020
6458a32
skip coverage measures
yanntm Apr 20, 2020
5b375f5
a new "dev" feature for eval+test
yanntm Apr 21, 2020
1741cc1
new child modules
yanntm Apr 21, 2020
ae51390
remove Java 11
yanntm Apr 21, 2020
31a0cda
discarding artifacts that should not live in the repo
yanntm Apr 21, 2020
05e8944
drop discovery of original cuny update site
yanntm Apr 21, 2020
2c8d08e
wrong plugin : citytech->ponder-lab
yanntm Apr 21, 2020
a904b5f
grab objenesis from maven central rather than embed
yanntm Apr 21, 2020
13ce050
grab org.apache.commons.csv from Nexus
yanntm Apr 21, 2020
0780bfd
drop lib/ folder declaration
yanntm Apr 21, 2020
4e6b747
add org.objenesis dependency
yanntm Apr 21, 2020
6124998
discarded lib folder
yanntm Apr 21, 2020
fd9f0d1
more removal of lib/ folders
yanntm Apr 21, 2020
3895c4c
add dep to org.apache.commons.csv
yanntm Apr 21, 2020
1b64c1c
let apache commons csv be part of the feature
yanntm Apr 21, 2020
e5f8ac6
let the "dev" feature also install pde+jdt source
yanntm Apr 21, 2020
b7f6acf
SubProgressMonitor deprecated => SubMonitor
yanntm Apr 21, 2020
ed544cd
copied in openjdk 8 jars
yanntm Jun 21, 2020
87b2fb7
add an activator for storage of the jars
yanntm Jun 21, 2020
882cfe6
test for general Project
yanntm Jun 21, 2020
875dbf5
FIX if we are not in Java Perspective
yanntm Jun 21, 2020
60d41a9
collect embedded RT.jar and others
yanntm Jun 21, 2020
979d6aa
unpack "core" to get the jars seeable
yanntm Jun 21, 2020
2f17155
Activator + API to get the embedded JRE
yanntm Jun 21, 2020
e01bbc2
solve issues with tests + activator
yanntm Jun 21, 2020
742b6c1
improve trace to allow diagnostic
yanntm Jun 21, 2020
d305ce0
compilation issue with newer wider API of ProgressMonitor
yanntm Mar 9, 2021
52d976f
included features become feature dependencies
yanntm Mar 9, 2021
537339b
align to 2021-03
yanntm Mar 9, 2021
886c0a6
drop travis-ci, go to gh-actions instead
yanntm Mar 9, 2021
68e88d6
typo in folder name
yanntm Mar 9, 2021
31475f4
skip tests we need headless
yanntm Mar 9, 2021
b475ce2
we need xvfb for these
yanntm Mar 9, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Java CI with Maven

on:
push:
branches: [ master ]
repository_dispatch:
types: [rebuild]

jobs:
build:
name: Maven
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache Maven packages
uses: actions/cache@v2
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build with Maven
run: cd edu.cuny.hunter.streamrefactoring.parent && mvn -T 4 -e generate-sources install -DskipTests && cd -
- name: Deploy to GitHub Pages
uses: JamesIves/github-pages-deploy-action@3.7.1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH: gh-pages # The branch the action should deploy to.
FOLDER: edu.cuny.hunter.streamrefactoring.updatesite/target/repository # The folder the action should deploy.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, the updatesite is "updated" on each build instead of, let's say, major/minor releases?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, but if you're considering merging this I should update to "modern" versions for a few of these, the syntax has evolved a bit see
lip6/ITS-commandline@e782ddc#diff-5c3fa597431eda03ac3339ae6bf7f05e1a50d6fc7333679ec38e21b337cb6721R45-R52
for an example

CLEAN: true # Automatically remove deleted files from the deploy branch
17 changes: 17 additions & 0 deletions .project
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
khatchad marked this conversation as resolved.
Show resolved Hide resolved
<projectDescription>
<name>Optimize-Java-8-Streams-Refactoring</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
2 changes: 2 additions & 0 deletions .settings/org.eclipse.core.resources.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8
43 changes: 37 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,43 @@
sudo: false
install: true

jdk:
- openjdk8

# due to absence of rt.jar and others, code broken for Java >= 9
# - openjdk11


language: java
jdk: openjdk8

before_script:
- echo $JAVA_OPTS
- export JAVA_OPTS='-Xms1g -Xmx3g'
- echo "MAVEN_OPTS='-Xmx3g'" > ~/.mavenrc

env:
global:
- MAVEN_OPTS="-Xmx3g"

cache:
apt: true
directories:
- $HOME/.m2

services:
- xvfb
script: mvn clean verify -Pjacoco coveralls:report
notifications:
slack: cunyponder:A8GuEoj0voEn2H7MJDL1eNji
- xvfb

script:
- cd edu.cuny.hunter.streamrefactoring.parent && mvn -e generate-sources install && cd -
- du -sh edu.cuny.hunter.streamrefactoring.updatesite/target/repository
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I also saw this in the GH actions build ...

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the du is just because sometimes upload might fail a bit silently if the files are too large, it also makes sure it's about the right size (some MB) so it was (maybe) built correctly

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This travis file is obsolete, they stopped offering free service for open source projects so I now only use GH actions. So this file can be deleted it is overridden by the Gh workflow file.


# this reporting step does not work currently...
# - cd edu.cuny.hunter.streamrefactoring.parent && mvn clean verify -Pjacoco coveralls:report && cd -


deploy:
provider: pages
skip_cleanup: true
github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard
local_dir: edu.cuny.hunter.streamrefactoring.updatesite/target/repository
on:
branch: master
19 changes: 7 additions & 12 deletions edu.cuny.hunter.streamrefactoring.core/.classpath
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="lib/objenesis-2.5.1.jar" sourcepath="lib/objenesis-2.5.1-sources.jar">
<attributes>
<attribute name="javadoc_location" value="jar:platform:/resource/edu.cuny.hunter.streamrefactoring.core/lib/objenesis-2.5.1-javadoc.jar!/"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
32 changes: 12 additions & 20 deletions edu.cuny.hunter.streamrefactoring.core/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,14 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: edu.cuny.hunter.streamrefactoring.core;singleton:=true
Bundle-Version: 1.9.0
Bundle-Version: 2.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Vendor: %Bundle-Vendor
Bundle-ClassPath: .,
lib/objenesis-2.5.1.jar
Bundle-ClassPath: .
Require-Bundle: org.eclipse.ltk.core.refactoring,
org.eclipse.equinox.registry,
org.eclipse.jdt.core,
org.eclipse.osgi,
edu.cuny.citytech.refactoring.common.core;bundle-version="1.1.0",
org.eclipse.jdt.ui,
org.eclipse.jface;bundle-version="3.11.0",
com.google.guava,
com.ibm.wala.ide;bundle-version="1.3.10",
com.ibm.wala.ide.jdt;bundle-version="1.3.10",
Expand All @@ -22,24 +18,20 @@ Require-Bundle: org.eclipse.ltk.core.refactoring,
com.ibm.wala.shrike;bundle-version="1.3.10",
com.ibm.safe.core;bundle-version="1.0.0",
com.ibm.safe.typestate;bundle-version="1.0.0",
org.eclipse.jdt.launching
org.eclipse.jdt.launching,
org.eclipse.core.resources,
org.eclipse.core.runtime,
org.eclipse.jdt.core.manipulation,
org.eclipse.text,
org.eclipse.ui,
org.eclipse.pde.core,
org.objenesis
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How does this get here? I see that the jar is removed, but now it is being referenced as a plug-in. Where did the plug-in come from?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess you mean the objenesis dependency.

The plugin is resolved directly in the Nexus central :
https://github.com/yanntm/Optimize-Java-8-Streams-Refactoring/blob/master/edu.cuny.hunter.streamrefactoring.parent/pom.xml#L149-L152

A lot of third-party artifacts are released there, among which is this objenesis dependency. https://mvnrepository.com/artifact/org.objenesis/objenesis

This is not as good as grabbing it from Orbit, because Orbit is a "simultaneous release" of components that are tested and interact well together and with the version of eclipse platform we are targetting. But it avoids at least repackaging our own, and lets us update automatically if a new version is released to maven central. It certainly is better than having a copy of the jar in our lib/ folder.

Export-Package: edu.cuny.hunter.streamrefactoring.core.analysis,
edu.cuny.hunter.streamrefactoring.core.contributions,
edu.cuny.hunter.streamrefactoring.core.descriptors,
edu.cuny.hunter.streamrefactoring.core.messages,
edu.cuny.hunter.streamrefactoring.core.refactorings,
edu.cuny.hunter.streamrefactoring.core.utils,
edu.cuny.hunter.streamrefactoring.core.wala
Import-Package: com.ibm.safe.controller,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's wrong with Import-Package?

Copy link
Author

@yanntm yanntm Jun 3, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Import-Package" means that this particular package should exist in the platform, but you are not specifying the plugin that provides it.
So it is a weakly declared dependency, in the sense you cannot actually import the package unless it is present in your platform (i.e. it has been installed).
Moving this dependency declaration to a "Require-Bundle" means that maven and eclipse p2 both understand the dependency and will deal with it appropriately (i.e. by deploying the plugin you depend on, and its own dependencies). So for a "managed" build it is recommended not to use "Import-Package", I removed mostly all of those.

The problem is then to find a "bundle" or plugin that provides the required package. We can resolve such artifacts in the update sites we provide to maven :
https://github.com/yanntm/Optimize-Java-8-Streams-Refactoring/blob/master/edu.cuny.hunter.streamrefactoring.parent/pom.xml#L109-L153

In this place I put the WALA and SAFE repositories, as well as point "orbit" which is an eclipse project providing quite a few common utilities packaged as bundles so we can use them in this kind of integration scenario. e.g. this is where we resolve dependencies on apache stuff https://download.eclipse.org/tools/orbit/downloads/drops/R20200529191137/
For instance this is where we now resolve org.apache.commons.csv dependencies (instead of packaging them ourselves in .eval plugin)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, interesting. I didn't know about that. Thanks!

com.ibm.safe.internal.exceptions,
com.ibm.safe.typestate.core,
org.eclipse.core.resources,
org.eclipse.core.runtime;version="3.5.0",
org.eclipse.core.runtime.jobs,
org.eclipse.jdt.core.refactoring,
org.eclipse.jdt.core.refactoring.descriptors,
org.eclipse.jdt.internal.ui,
org.eclipse.jface.text,
org.eclipse.pde.core.plugin,
org.eclipse.text.edits,
org.eclipse.ui.plugin
Bundle-ActivationPolicy: lazy
Bundle-Activator: edu.cuny.streamrefactoring.core.plugin.StreamRefactorCorePlugin
2 changes: 0 additions & 2 deletions edu.cuny.hunter.streamrefactoring.core/build.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ bin.includes = META-INF/,\
plugin.xml,\
OSGI-INF/,\
EclipseDefaultExclusions.txt,\
lib/objenesis-2.5.1.jar,\
logging.properties
src.includes = EclipseDefaultExclusions.txt,\
lib/,\
pom.xml,\
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
6 changes: 3 additions & 3 deletions edu.cuny.hunter.streamrefactoring.core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>edu.cuny.hunter.streamrefactoring</groupId>
<artifactId>parent</artifactId>
<version>1.3.0</version>
<artifactId>edu.cuny.streamrefactoring.parent</artifactId>
<version>2.0.0-SNAPSHOT</version>
<relativePath>../edu.cuny.hunter.streamrefactoring.parent/pom.xml</relativePath>
</parent>
<artifactId>edu.cuny.hunter.streamrefactoring.core</artifactId>
<packaging>eclipse-plugin</packaging>
<version>1.9.0</version>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
Expand Down Expand Up @@ -171,7 +170,7 @@ public OptimizeStreamsRefactoringProcessor(IJavaProject[] javaProjects, final Co
this.useImplicitBenchmarkEntrypoints = useImplicitBenchmarkEntrypoints;
this.useImplicitJavaFXEntrypoints = useImplicitJavaFXEntrypoints;
} finally {
monitor.ifPresent(IProgressMonitor::done);
monitor.ifPresent(p -> p.done());
}
}

Expand Down Expand Up @@ -370,7 +369,7 @@ public Change createChange(IProgressMonitor pm) throws CoreException, OperationC
for (ICompilationUnit cu : units) {
CompilationUnit compilationUnit = this.getCompilationUnit(cu, pm);
this.manageCompilationUnit(manager, this.getCompilationUnitRewrite(cu, compilationUnit),
Optional.of(new SubProgressMonitor(pm, IProgressMonitor.UNKNOWN)));
Optional.of(SubMonitor.convert(pm, IProgressMonitor.UNKNOWN)));
}

final Map<String, String> arguments = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
import com.ibm.wala.util.CancelException;
import com.ibm.wala.util.config.FileOfClasses;

import edu.cuny.streamrefactoring.core.plugin.StreamRefactorCorePlugin;

/**
* Modified from EclipseAnalysisEngine.java, originally from Keshmesh. Authored
* by Mohsen Vakilian and Stas Negara. Modified by Nicholas Chen and Raffi
Expand Down Expand Up @@ -92,6 +94,9 @@ void addToScopeWindows(String fileName, Path installPath) throws IOException {
this.scope.addToScope(Primordial, new JarFile(installPath.resolve("lib").resolve(fileName).toFile()));
}

void addToScope(String fileName, Path installPath) throws IOException {
this.scope.addToScope(Primordial, new JarFile(installPath.resolve("lib").resolve(fileName).toFile()));
}
@Override
public void buildAnalysisScope() throws IOException {
try {
Expand All @@ -103,27 +108,25 @@ public void buildAnalysisScope() throws IOException {
this.scope = this.ePath.toAnalysisScope(this.makeAnalysisScope());

// if no primordial classes are in scope.
if (this.scope.getModules(ClassLoaderReference.Primordial).isEmpty()) {
if (this.scope.getModules(ClassLoaderReference.Primordial).isEmpty()
|| true) { // TODO : this should test Java 9+ is used

// Add "real" libraries per
// https://github.com/ponder-lab/Java-8-Stream-Refactoring/issues/83.

IVMInstall defaultVMInstall = JavaRuntime.getDefaultVMInstall();
File installLocation = defaultVMInstall.getInstallLocation();
Path installPath = installLocation.toPath();
// old version
// IVMInstall defaultVMInstall = JavaRuntime.getDefaultVMInstall();
// File installLocation = defaultVMInstall.getInstallLocation();

if (Util.isWindows()) {
this.addToScopeWindows("resources.jar", installPath);
this.addToScopeWindows("rt.jar", installPath);
this.addToScopeWindows("jsse.jar", installPath);
this.addToScopeWindows("jce.jar", installPath);
this.addToScopeWindows("charsets.jar", installPath);
} else {
this.addToScopeNotWindows("resources.jar", installPath);
this.addToScopeNotWindows("rt.jar", installPath);
this.addToScopeNotWindows("jsse.jar", installPath);
this.addToScopeNotWindows("jce.jar", installPath);
this.addToScopeNotWindows("charsets.jar", installPath);
}
// embedded version
File installLocation = new File(StreamRefactorCorePlugin.getJVMLocalVersionURI().getPath() ) ;
Path installPath = installLocation.toPath();

this.addToScope("resources.jar", installPath);
this.addToScope("rt.jar", installPath);
this.addToScope("jsse.jar", installPath);
this.addToScope("jce.jar", installPath);
this.addToScope("charsets.jar", installPath);

}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package edu.cuny.streamrefactoring.core.plugin;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.logging.Logger;

import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.BundleContext;

public class StreamRefactorCorePlugin extends Plugin {

// The plug-in ID
public static final String PLUGIN_ID = "edu.cuny.streamrefactoring.core"; //$NON-NLS-1$

// The shared instance
private static StreamRefactorCorePlugin plugin;

private static URI jvmLocalVersionUri = null;

/**
* The constructor
*/
public StreamRefactorCorePlugin() {
}

/** {@inheritDoc} */
public final void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}

/** {@inheritDoc} */
public final void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}

/**
* Returns the shared instance
*
* @return the shared instance
*/
public static StreamRefactorCorePlugin getDefault() {
return plugin;
}


private static final Logger log = Logger.getLogger(PLUGIN_ID);

public static URI getJVMLocalVersionURI() throws IOException {
if (jvmLocalVersionUri == null) {
String relativePath = "jre/";
URL toolff = getDefault().getBundle().getResource(relativePath);
if (toolff == null) {
log.severe("unable to find a folder for JRE in path " + relativePath);
throw new IOException("Unable to find the embedded JVM folder " + relativePath + " within bundle "+ getDefault().getBundle());
}
URL tmpURL = FileLocator.toFileURL(toolff);

// use of the multi-argument constructor for URI in order to escape appropriately illegal characters
URI uri;
try {
uri = new URI(tmpURL.getProtocol(), tmpURL.getPath(), null);
} catch (URISyntaxException e) {
throw new IOException("Could not create a URI to access the binary tool :", e);
}
jvmLocalVersionUri = uri;
log.fine("Location of the JRE libs : " + jvmLocalVersionUri);
}
return jvmLocalVersionUri;
}
}
17 changes: 17 additions & 0 deletions edu.cuny.hunter.streamrefactoring.dev.feature/.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>edu.cuny.hunter.streamrefactoring.dev.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
bin.includes = feature.xml
src.includes = feature.xml,\
build.properties
Loading