#!/bin/sh BEANSHELL_JAR=$HOME/Downloads/bsh-2.0b4.jar # replace path to suit your environment java -cp $BEANSHELL_JAR bsh.Interpreter $@
Entries tagged [maven]
BeanShell recipies
TweetPosted on Sunday Jan 24, 2016 at 04:00PM in Technology
BeanShell is a handy lightweight scripting language for Java. In this entry, I’ll introduce you some useful snippets powered by BeanShell, and some recipies about it.
Setup and hello world
Grab a copy of bsh-2.0b4.jar
from http://www.beanshell.org and put following shell script named bsh
into your PATH:
Then fire up bsh
from your console then just put print("hello, world!");
to confirm it works.
$ bsh BeanShell 2.0b4 - by Pat Niemeyer (pat@pat.net) bsh % print("hello, world!"); hello, world!
Hit Ctrl+D
to exit interpreter.
You can launch your BeanShell script in a file as follows:
$ echo 'print("hello, world!");' > hello.bsh $ bsh hello.bsh hello, world!
Stdin
Text filtering script can be written as follows:
Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println(line.toUpperCase()); }
Save this script as toUpperCase.bsh
. The script can be executed as follows:
$ echo foo | bsh toUpperCase.bsh FOO
Command line arguments
Command line arguments can be used as follows:
sb = new StringBuilder(); for (arg : bsh.args) { sb.append(arg); } print(sb);
Save this script as args.bsh
. The script can be executed as follows:
$ bsh args.bsh foo bar foobar
Use of external jar
Any external jar can be added via addClassPath clause dynamically. For example, a SQL beautifier script powered by a Hibernate class can be written as follows:
addClassPath("/path/to/hibernate-core-4.3.7.Final.jar"); // replace path to suit your environment import org.hibernate.engine.jdbc.internal.BasicFormatterImpl; scanner = new Scanner(System.in); sb = new StringBuilder(); while (scanner.hasNextLine()) { sb.append(scanner.nextLine()).append('\n'); } beautifized = new BasicFormatterImpl().format(sb.toString()); print(beautifized);
Save this script as sql-beautifier.bsh
then execute following command:
$ SQL="SELECT t0.content AS a2, t0.contenttype AS a3, t0.email AS a4 FROM roller_comment t0, weblogentry t1 WHERE ((t1.websiteid = 'f0588427-f2ca-4843-ac87-bbb31aa6013c') AND (t1.id = t0.entryid)) ORDER BY t0.posttime DESC LIMIT 31 OFFSET 0;" $ echo $SQL | bsh sql-beautifier.bsh
This yields nicely formatted SQL:
SELECT t0.content AS a2, t0.contenttype AS a3, t0.email AS a4 FROM roller_comment t0, weblogentry t1 WHERE ( ( t1.websiteid = 'f0588427-f2ca-4843-ac87-bbb31aa6013c' ) AND ( t1.id = t0.entryid ) ) ORDER BY t0.posttime DESC LIMIT 31 OFFSET 0;
Maven plugin
If you have Maven installed, you can execute any BeanShell script without obtaining bsh-2.0b4.jar
by hand. Maven and the beanshell-maven-plugin takes care of it instead of you:
$ mvn com.github.genthaler:beanshell-maven-plugin:1.0:run -Dbsh.file="hello.bsh" ... [INFO] --- beanshell-maven-plugin:1.0:run (default-cli) @ standalone-pom --- [INFO] Executing Script [INFO] file class java.lang.String [INFO] script class java.lang.Object [INFO] interpreting file hello.bsh hello, world!
Note that you don’t need to create pom.xml
to execute a simple BeanShell script.
For managing complex dependencies, you can leave that duty to Maven with pom.xml
:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>sql-beautifier</groupId> <artifactId>sql-beautifier</artifactId> <version>1.0-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>com.github.genthaler</groupId> <artifactId>beanshell-maven-plugin</artifactId> <version>1.0</version> <configuration> <script><![CDATA[ import java.nio.charset.Charset; import org.apache.commons.io.FileUtils; import org.hibernate.engine.jdbc.internal.BasicFormatterImpl; file = new File(System.getProperty("sql")); sql = FileUtils.readFileToString(file, Charset.defaultCharset()); result = new BasicFormatterImpl().format(sql); print(result); ]]></script> </configuration> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.7.Final</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
Save the SQL you want to beautify as original.sql
and executing following command yields similar result:
$ mvn bsh:run -Dsql=original.sql
jEdit integration
jEdit has pretty nice integration with BeanShell. You can integrate that SQL beautifier as a jEdit macro. Put following snippet as ~/Library/jEdit/macros/FormatSQL.bsh
(for OS X) or create it with Macros → New Macro
from jEdit menu bar:
addClassPath("/path/to/hibernate-core-4.3.7.Final.jar"); // replace path to suit your environment import org.hibernate.engine.jdbc.internal.BasicFormatterImpl; sql = textArea.getSelectedText(); beautifized = new BasicFormatterImpl().format(sql); textArea.setSelectedText(beautifized);
Paste SQL to any jEdit buffer, and select SQL statement and execute the macro with Macros → FormatSQL
to trigger formatting.
Excluding particular JUnit test cases that marked as slow in the time of execution
TweetPosted on Sunday Nov 01, 2015 at 03:43PM in Technology
Sometimes we need to create some slow test cases that involve some external resources such as databases, or external API servers. They are necessary to ensure that your application can integrate with such external resources while vast majority of test cases should stick with fast-running plain unit testing.
In such case, We usually wants to exclude such slow test cases from the ones that are frequently executed in local development environment so that we can get timely response from the tests. In this posting, I introduce you a solution that avoids maintenance of any hand-made listing of test cases.
Creating a suite that scans and runs all of test cases exist in classpath
First, assume we have a simple production class named Hello
.
public class Hello { public String greetings(String name) { return name != null ? "hello, " + name : "hi, what's your name?"; } }
We also have a couple of test cases against the preceding class:
public class HelloTest1 { @Test public void test() { System.out.println("Running " + getClass().getSimpleName()); Assert.assertEquals("hello, kyle", new Hello().greetings("kyle")); } } public class HelloTest2 { @Test public void test() { System.out.println("Running " + getClass().getSimpleName()); Assert.assertEquals("hi, what's your name?", new Hello().greetings(null)); } }
Next, We’d like to introduce a test suite that automatically includes the preceding two test cases. Put a following dependency to your pom.xml
:
<dependency> <groupId>io.takari.junit</groupId> <artifactId>takari-cpsuite</artifactId> <version>1.2.7</version> <scope>test</scope> </dependency>
And create a test suite that named AllTests
as follows. You can run this suite from your IDE or executing mvn -Dtest=AllTests test
.
@RunWith(ClasspathSuite.class) public class AllTests { }
Involving a slow test case and exclude it
First, Create a marker interface which indicates that this test is slow:
public interface SlowTest { }
Next create a slow test case which annotated with @Category(SlowTest.class)
that we would like to avoid execute it frequently:
@Category(SlowTest.class) public class HelloSlowTest { @Test public void test() throws Exception { System.out.println("Running " + getClass().getSimpleName()); Thread.sleep(3000); } }
Finally create a test suite that automatically excludes the test cases annotated as slow but executes rest of the test cases:
@RunWith(Categories.class) @ExcludeCategory(SlowTest.class) @SuiteClasses(AllTests.class) public class AllExceptSlowTests { }
You can run it on a daily basis instead of selecting root of your entire project and execute tests from your IDE or Maven without any hand maintenance of the listings of tests. For example, mvn -Dtest=AllExceptSlowTests test
produces following output in very short-term execution time:
... ------------------------------------------------------- T E S T S ------------------------------------------------------- Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 Running category.suite.AllExceptSlowTests Running HelloTest1 Running HelloTest2 Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.084 sec ...
The complete resources can be obtained from https://github.com/lbtc-xxx/junit-category
Building environment specific artifacts with classifier
TweetPosted on Friday Mar 20, 2015 at 03:09PM in Maven
Consider following multi-module Maven project:
-
classifier
: The parent & aggregator project -
persistence
: A jar project which holds JPA entities and a persistence descriptor (persistence.xml
) -
web
: A war project which depends onpersistence
project
persistence
project contains following persistence descriptor:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="myPU"> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> <properties> <property name="javax.persistence.schema-generation.database.action" value="${javax.persistence.schema-generation.database.action}"/> </properties> </persistence-unit> </persistence>
I need to set javax.persistence.schema-generation.database.action
property as drop-and-create
for development environment, but none
for production environment. in such case, using profiles and filtering might be a solution, but its shortcoming is that we can hold only one (among environment specific builds) artifact in the local repository because these builds has same coordinate. it may bring unexpected result such as deploying development build to the production environment by some accident. in such case, using classifier would be a better solution.
Preparation
First, let’s enable resource filtering in persistence
project.
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <!-- Filter and copy resources under src/main/resources into target/classes (default location) --> <execution> <id>default-resources</id> <phase>process-resources</phase> <goals> <goal>resources</goal> </goals> <configuration> <filters> <filter>${basedir}/filters/dev.properties</filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build>
Then put filters/dev.properties
:
javax.persistence.schema-generation.database.action=drop-and-create
Set a dependency in web
project:
<dependencies> <dependency> <groupId>org.nailedtothex.examples.classifier</groupId> <artifactId>persistence</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
Add configurations for producing artifacts for production
Now we can make artifacts that holds filtered persistence.xml
for development environment. next, let’s add configurations for producing artifacts for production environment with prod
classifier.
Put following profile definition into persistence
project to make the project to produce both of development and production (with prod
classifier) artifacts:
<profile> <id>prod</id> <properties> <filteredResources>target/filtered-classes</filteredResources> </properties> <build> <plugins> <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <!-- Filter and copy resources under src/main/resources into target/filtered-classes/prod --> <execution> <id>prod-resources</id> <phase>process-resources</phase> <goals> <goal>resources</goal> </goals> <configuration> <outputDirectory>${filteredResources}/prod</outputDirectory> <filters> <filter>${basedir}/filters/prod.properties</filter> </filters> </configuration> </execution> <!-- Copy classes under target/classes into target/filtered-classes/prod --> <!-- Existing files will not be overwritten. --> <!-- see http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#overwrite --> <execution> <id>copy-classes-prod</id> <phase>process-classes</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${filteredResources}/prod</outputDirectory> <resources> <resource> <directory>${project.build.outputDirectory}</directory> <filtering>false</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <executions> <!-- Create the production jar with files inside target/filtered-classes/prod --> <execution> <id>prod-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <classifier>prod</classifier> <classesDirectory>${filteredResources}/prod</classesDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile>
Also put filters/prod.properties
:
javax.persistence.schema-generation.database.action=none
Issue following command:
$ mvn clean install -P prod
Result:
... [INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ persistence --- [INFO] Building jar: /Users/kyle/src/classifier/persistence/target/persistence-1.0-SNAPSHOT.jar [INFO] [INFO] --- maven-jar-plugin:2.6:jar (prod-jar) @ persistence --- [INFO] Building jar: /Users/kyle/src/classifier/persistence/target/persistence-1.0-SNAPSHOT-prod.jar [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ persistence --- [INFO] Installing /Users/kyle/src/classifier/persistence/target/persistence-1.0-SNAPSHOT.jar to /Users/kyle/.m2/repository/org/nailedtothex/examples/classifier/persistence/1.0-SNAPSHOT/persistence-1.0-SNAPSHOT.jar [INFO] Installing /Users/kyle/src/classifier/persistence/pom.xml to /Users/kyle/.m2/repository/org/nailedtothex/examples/classifier/persistence/1.0-SNAPSHOT/persistence-1.0-SNAPSHOT.pom [INFO] Installing /Users/kyle/src/classifier/persistence/target/persistence-1.0-SNAPSHOT-prod.jar to /Users/kyle/.m2/repository/org/nailedtothex/examples/classifier/persistence/1.0-SNAPSHOT/persistence-1.0-SNAPSHOT-prod.jar ...
You can see both of artifacts are installed as expected:
$ unzip -p /Users/kyle/.m2/repository/org/nailedtothex/examples/classifier/persistence/1.0-SNAPSHOT/persistence-1.0-SNAPSHOT.jar META-INF/persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="myPU"> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> <properties> <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> </properties> </persistence-unit> </persistence> $ unzip -p /Users/kyle/.m2/repository/org/nailedtothex/examples/classifier/persistence/1.0-SNAPSHOT/persistence-1.0-SNAPSHOT-prod.jar META-INF/persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="myPU"> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> <properties> <property name="javax.persistence.schema-generation.database.action" value="none"/> </properties> </persistence-unit> </persistence>
So what is needed for web
project? put following profile as well:
<profile> <id>prod</id> <dependencies> <dependency> <groupId>org.nailedtothex.examples.classifier</groupId> <artifactId>persistence</artifactId> <version>1.0-SNAPSHOT</version> <classifier>prod</classifier> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <executions> <execution> <id>default-war</id> <phase>package</phase> <goals> <goal>war</goal> </goals> <configuration> <packagingExcludes>WEB-INF/lib/persistence-1.0-SNAPSHOT-prod.jar</packagingExcludes> </configuration> </execution> <execution> <id>prod-war</id> <phase>package</phase> <goals> <goal>war</goal> </goals> <configuration> <classifier>prod</classifier> <packagingExcludes>WEB-INF/lib/persistence-1.0-SNAPSHOT.jar</packagingExcludes> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile>
Then you will get both of artifacts installed after issuing mvn clean install -P prod
as follows:
$ unzip -l /Users/kyle/.m2/repository/org/nailedtothex/examples/classifier/web/1.0-SNAPSHOT/web-1.0-SNAPSHOT.war | grep persistence 3521 03-20-15 14:25 WEB-INF/lib/persistence-1.0-SNAPSHOT.jar $ unzip -l /Users/kyle/.m2/repository/org/nailedtothex/examples/classifier/web/1.0-SNAPSHOT/web-1.0-SNAPSHOT-prod.war | grep persistence 3513 03-20-15 14:25 WEB-INF/lib/persistence-1.0-SNAPSHOT-prod.jar
An example of Maven EAR project consists of an EJB interface, an EJB implementation and a WAR
TweetPosted on Friday Mar 06, 2015 at 10:43PM in Maven
The project consists of following principal modules:
-
eartest-ejb-api: holds an EJB local interface named
Hello
. packaging=jar. no dependency. -
eartest-ejb-impl: holds an EJB implementation named
HelloImpl
which implementsHello
. packaging=ejb. depends on eartest-ejb-api. -
eartest-war: holds an Servlet which has an injection point of
Hello
interface. depends on eartest-ejb-api. -
eartest-ear: holds above 3 modules in the EAR.
Whole project is can be obtained from https://github.com/lbtc-xxx/eartest .
Structure of eartest-ear module
$ tree eartest-ear/target/eartest-ear eartest-ear/target/eartest-ear |-- META-INF | `-- application.xml |-- eartest-ejb-impl-1.0-SNAPSHOT.jar |-- eartest-war-1.0-SNAPSHOT.war `-- lib `-- eartest-ejb-api-1.0-SNAPSHOT.jar 2 directories, 4 files
Structure of eartest-war module
$ tree eartest-war/target/eartest-war eartest-war/target/eartest-war |-- META-INF `-- WEB-INF `-- classes `-- eartest `-- war `-- MyServlet.class 5 directories, 1 file
MyServlet can reference eartest-ejb-api-1.0-SNAPSHOT.jar
because it’s placed under lib
directory in the parent EAR. this packaging style is called as Skinny WAR.
Structure of eartest-ejb-api
$ tree eartest-ejb-api/target/classes eartest-ejb-api/target/classes `-- eartest `-- ejb `-- api `-- Hello.class 3 directories, 1 file
Structure of eartest-ejb-impl
$ tree eartest-ejb-impl/target/classes eartest-ejb-impl/target/classes |-- META-INF | `-- ejb-jar.xml `-- eartest `-- ejb `-- impl `-- HelloImpl.class 4 directories, 2 files
A problem with IntelliJ IDEA
IntelliJ has an annoying issue: Maven support cannot handle skinny wars for EAR deployments : IDEA-97324. this brings unnecessary eartest-ejb-api into WEB-INF/lib
inside the WAR and brings following exception. to avoid this, I need to put <scope>provided</scope>
in dependency declaration for eartest-ejb-api
in pom.xml
of eartest-war
.
Caused by: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:162) at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:133) at org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:89) at org.jboss.as.ee.component.ComponentRegistry$ComponentManagedReferenceFactory.getReference(ComponentRegistry.java:149) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$5.createInstance(UndertowDeploymentInfoService.java:1233) at io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:215) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final] ... 27 more Caused by: java.lang.IllegalArgumentException: Can not set eartest.ejb.api.Hello field eartest.war.MyServlet.hello to eartest.ejb.api.Hello$$$view17 at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) [rt.jar:1.8.0_20] at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) [rt.jar:1.8.0_20] at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) [rt.jar:1.8.0_20] at java.lang.reflect.Field.set(Field.java:758) [rt.jar:1.8.0_20] at org.jboss.as.ee.component.ManagedReferenceFieldInjectionInterceptorFactory$ManagedReferenceFieldInjectionInterceptor.processInvocation(ManagedReferenceFieldInjectionInterceptorFactory.java:108) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) at org.jboss.as.ee.component.AroundConstructInterceptorFactory$1.processInvocation(AroundConstructInterceptorFactory.java:28) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final] at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326) at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:160) ... 32 more
Getting dependencies with Maven dependency plugin
TweetPosted on Friday Feb 27, 2015 at 11:30AM in Maven
I want to get all of dependencies of:
<dependency> <groupId>org.jboss.as</groupId> <artifactId>jboss-as-controller-client</artifactId> <version>7.2.0.Final</version> </dependency>
So, create pom.xml
as follows:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.nailedtothex</groupId> <artifactId>get-dependencies</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.jboss.as</groupId> <artifactId>jboss-as-controller-client</artifactId> <version>7.2.0.Final</version> </dependency> </dependencies> </project>
Then issue:
$ mvn dependency:copy-dependencies
Then you will get:
$ ls -l target/dependency/ total 2824 -rw-r--r--+ 1 kyle staff 3933 Feb 27 11:25 jboss-as-build-config-7.2.0.Final.jar -rw-r--r--+ 1 kyle staff 177511 Feb 27 11:25 jboss-as-controller-client-7.2.0.Final.jar -rw-r--r--+ 1 kyle staff 96612 Feb 27 11:25 jboss-as-protocol-7.2.0.Final.jar -rw-r--r--+ 1 kyle staff 92053 Feb 27 11:25 jboss-dmr-1.1.6.Final.jar -rw-r--r--+ 1 kyle staff 55248 Feb 27 11:25 jboss-logging-3.1.2.GA.jar -rw-r--r--+ 1 kyle staff 229373 Feb 27 11:25 jboss-marshalling-1.3.16.GA.jar -rw-r--r--+ 1 kyle staff 238355 Feb 27 11:25 jboss-remoting-3.2.14.GA.jar -rw-r--r--+ 1 kyle staff 89315 Feb 27 11:25 jboss-sasl-1.0.3.Final.jar -rw-r--r--+ 1 kyle staff 119912 Feb 27 11:25 jboss-threads-2.1.0.Final.jar -rw-r--r--+ 1 kyle staff 241808 Feb 27 11:25 xnio-api-3.0.7.GA.jar -rw-r--r--+ 1 kyle staff 80070 Feb 27 11:25 xnio-nio-3.0.7.GA.jar $
Tags: maven