You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@karaf.apache.org by Max Spring <m2...@springdot.org> on 2016/12/07 18:16:15 UTC
how to get Karaf's terminal width?
Is there a way to get the actual jline terminal object in a Karaf command?
I want to format the command output depending on the terminal width.
I'm on Ubuntu 16.04, Java 1.8.0_60-x64, and Karaf 3.0.5.
This one
package org.example;
import jline.TerminalFactory;
import org.apache.karaf.shell.commands.Command;
import org.apache.karaf.shell.console.OsgiCommandSupport;
@Command(scope = "example", name = "term-wdith", description = "get the terminal width")
public class TermWidthCmd extends OsgiCommandSupport{
protected Object doExecute() throws Exception {
int w = TerminalFactory.get().getTerminalWidth();
return null;
}
}
gives:
| 2016-12-07 10:10:17,443 | ERROR | l for user karaf | ShellUtil | 27 - org.apache.karaf.shell.console - 3.0.5 | Exception caught while executing command
| java.lang.IncompatibleClassChangeError: Found interface jline.Terminal, but class was expected
| at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:11)
| at org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)
| at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)
| at org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)
| at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown Source)
| at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown Source)
| at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
| at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
| at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
| at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
| at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
| at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
| at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
| at org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)
| at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
| at java.security.AccessController.doPrivileged(Native Method)[:1.8.0_60]
| at org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas.modules:3.0.5]
| at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.shell.console:3.0.5]
The 2nd approach
package org.example;
import jline.NoInterruptUnixTerminal;
import jline.Terminal;
import org.apache.karaf.shell.commands.Command;
import org.apache.karaf.shell.console.OsgiCommandSupport;
@Command(scope = "example", name = "term-wdith", description = "get the terminal width")
public class TermWidthCmd extends OsgiCommandSupport{
protected Object doExecute() throws Exception {
Terminal term = session != null ? (Terminal) session.get(".jline.terminal") : null;
NoInterruptUnixTerminal uterm = (NoInterruptUnixTerminal)term;
int w = term.getTerminalWidth();
return null;
}
}
basically gives the same exception:
| 2016-12-07 10:09:11,964 | ERROR | l for user karaf | ShellUtil | 27 - org.apache.karaf.shell.console - 3.0.5 | Exception caught while executing command
| java.lang.IncompatibleClassChangeError: Found interface jline.Terminal, but class was expected
| at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:14)
| at org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)
| at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)
| at org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)
| at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown Source)
| at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown Source)
| at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
| at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
| at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
| at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
| at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
| at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
| at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
| at org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)
| at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
| at java.security.AccessController.doPrivileged(Native Method)[:1.8.0_60]
| at org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas.modules:3.0.5]
| at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.shell.console:3.0.5]
What am I missing?
Thanks!
-Max
Re: how to get Karaf's terminal width?
Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
Hi Max,
AFAIR, the Session should contain the width. Let me check.
Regards
JB
On 12/07/2016 07:16 PM, Max Spring wrote:
> Is there a way to get the actual jline terminal object in a Karaf command?
> I want to format the command output depending on the terminal width.
> I'm on Ubuntu 16.04, Java 1.8.0_60-x64, and Karaf 3.0.5.
>
> This one
>
> package org.example;
>
> import jline.TerminalFactory;
> import org.apache.karaf.shell.commands.Command;
> import org.apache.karaf.shell.console.OsgiCommandSupport;
>
> @Command(scope = "example", name = "term-wdith", description = "get
> the terminal width")
> public class TermWidthCmd extends OsgiCommandSupport{
>
> protected Object doExecute() throws Exception {
> int w = TerminalFactory.get().getTerminalWidth();
>
> return null;
> }
> }
>
> gives:
>
> | 2016-12-07 10:10:17,443 | ERROR | l for user karaf |
> ShellUtil | 27 - org.apache.karaf.shell.console -
> 3.0.5 | Exception caught while executing command
> | java.lang.IncompatibleClassChangeError: Found interface
> jline.Terminal, but class was expected
> | at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:11)
> | at
> org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)
>
> | at
> org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)
>
> | at
> org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)
>
> | at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown Source)
> | at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown Source)
> | at
> org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
> | at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
> | at
> org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
> | at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
> | at
> org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
>
> | at
> org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)
>
> | at
> org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
>
> | at java.security.AccessController.doPrivileged(Native
> Method)[:1.8.0_60]
> | at
> org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas.modules:3.0.5]
>
> | at
> org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.shell.console:3.0.5]
>
>
> The 2nd approach
>
> package org.example;
>
> import jline.NoInterruptUnixTerminal;
> import jline.Terminal;
> import org.apache.karaf.shell.commands.Command;
> import org.apache.karaf.shell.console.OsgiCommandSupport;
>
> @Command(scope = "example", name = "term-wdith", description = "get
> the terminal width")
> public class TermWidthCmd extends OsgiCommandSupport{
>
> protected Object doExecute() throws Exception {
> Terminal term = session != null ? (Terminal)
> session.get(".jline.terminal") : null;
> NoInterruptUnixTerminal uterm = (NoInterruptUnixTerminal)term;
> int w = term.getTerminalWidth();
>
> return null;
> }
> }
>
> basically gives the same exception:
>
> | 2016-12-07 10:09:11,964 | ERROR | l for user karaf |
> ShellUtil | 27 - org.apache.karaf.shell.console -
> 3.0.5 | Exception caught while executing command
> | java.lang.IncompatibleClassChangeError: Found interface
> jline.Terminal, but class was expected
> | at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:14)
> | at
> org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)
>
> | at
> org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)
>
> | at
> org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)
>
> | at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown Source)
> | at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown Source)
> | at
> org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
> | at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
> | at
> org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
> | at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
> | at
> org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
>
> | at
> org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)
>
> | at
> org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
>
> | at java.security.AccessController.doPrivileged(Native
> Method)[:1.8.0_60]
> | at
> org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas.modules:3.0.5]
>
> | at
> org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.shell.console:3.0.5]
>
>
> What am I missing?
>
> Thanks!
> -Max
>
--
Jean-Baptiste Onofr�
jbonofre@apache.org
http://blog.nanthrax.net
Talend - http://www.talend.com
Re: how to get Karaf's terminal width?
Posted by Max Spring <m2...@springdot.org>.
Yes! 'mvn dependency:tree' showed I get an old jline bundle (org.apache.servicemix.bundles.jline:jar:0.9.94_1) via my Neo4j client dependency.
Adding an exclusion to the dependency and my example does work.
package org.example;
import jline.TerminalFactory;
import org.apache.karaf.shell.commands.Command;
import org.apache.karaf.shell.console.OsgiCommandSupport;
@Command(scope = "example", name = "term-wdith", description = "get the terminal width")
public class TermWidthCmd extends OsgiCommandSupport{
protected Object doExecute() throws Exception {
int w = TerminalFactory.get().getWidth();
System.out.println("w="+w);
return null;
}
}
Thanks a lot Guillaume!
-Max
On 12/07/2016 11:58 AM, Guillaume Nodet wrote:
> Can you run a "mvn dependency:tree" on your bundle ? I do suspect you have a jline 1.x somewhere, as found by the maven bundle plugin when computing the package version.
>
> 2016-12-07 20:06 GMT+01:00 Max Spring <m2spring@springdot.org <ma...@springdot.org>>:
>
> Yes, I probably have here some build issue going on.
>
> I've got the jline bundle v2.13.0 in my container:
>
> | karaf@root()> list -s -t 0 | grep jline
> | 22 | Active | 30 | 2.13.0 | jline
> |
> | karaf@root()> bundle:headers 22
> |
> | JLine (22)
> | ----------
> | Archiver-Version = Plexus Archiver
> | Originally-Created-By = Apache Maven Bundle Plugin
> | Created-By = Apache Maven Bundle Plugin
> | Manifest-Version = 1.0
> | Bnd-LastModified = 1439224319120
> | Build-Jdk = 1.8.0_45
> | Built-By = gnodet
> | Tool = Bnd-2.4.1.201501161923
> |
> | Bundle-License = http://www.opensource.org/licenses/bsd-license.php <http://www.opensource.org/licenses/bsd-license.php>
> | Bundle-ManifestVersion = 2
> | Bundle-SymbolicName = jline
> | Bundle-Version = 2.13.0
> | Bundle-Name = JLine
> | Bundle-Description = Sonatype helps open source projects to set up Maven repositories on https://oss.sonatype.org/
> |
> | Require-Capability =
> | osgi.ee <http://osgi.ee>;filter:=(&(osgi.ee <http://osgi.ee>=JavaSE)(version=1.5))
> |
> | Export-Package =
> | jline;uses:=jline.internal;version=2.13.0,
> | jline.console;uses:="jline,jline.console.completer,jline.co <http://jline.co>nsole.history";version=2.13.0,
> | jline.console.completer;uses:=jline.console;version=2.13.0,
> | jline.console.history;version=2.13.0,
> | jline.console.internal;version=2.13.0,
> | jline.internal;version=2.13.0,
> | org.fusesource.jansi;version=1.11
>
> The Maven artifact with version 2.13 is identical to the cached bundle (not sure why the Maven artifact doesn't have the micro version, though):
>
> | $ diff karaf/data/cache/bundle22/version0.0/bundle.jar ~/.m2/repository/jline/jline/2.13/jline-2.13.jar; echo $?
> | 0
>
> If I do this in my POM
>
> | <dependencies>
> | ...
> | <dependency>
> | <groupId>jline</groupId>
> | <artifactId>jline</artifactId>
> | <version>2.13</version>
> | </dependency>
> | ...
> | </dependencies>
> |
> | <build>
> | <plugins>
> | <plugin>
> | <groupId>org.apache.felix</groupId>
> | <artifactId>maven-bundle-plugin</artifactId>
> | <inherited>true</inherited>
> | <extensions>true</extensions>
> | <configuration>
> | <instructions>
> | <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
> | </instructions>
> | </configuration>
> | </plugin>
> | </plugins>
> | </build>
>
> then when I try to install my feature which references my bundle with the example command, I get:
>
> | karaf@root()> feature:install my-feature
> | no such process "maven/boot" to wait for
> | Error executing command: Can't install feature my-feature/0.0.0:
> | Could not start bundle mvn:org.example/example-bundle/1.0.0-SNAPSHOT in feature(s) example-bundle-1.0.0-SNAPSHOT: Unresolved constraint in bundle example-bundle [195]: Unable to resolve 195.0: missing requirement [195.0] osgi.wiring.package; (&(osgi.wiring.package=jline)(version>=0.9.0)(!(version>=1.0.0)))
>
> But when I explicitly specify the version of the jline package, my bundle does install:
>
> | <dependencies>
> | ...
> | <dependency>
> | <groupId>jline</groupId>
> | <artifactId>jline</artifactId>
> | <version>2.13</version>
> | </dependency>
> | ...
> | </dependencies>
> |
> | <build>
> | <plugins>
> | <plugin>
> | <groupId>org.apache.felix</groupId>
> | <artifactId>maven-bundle-plugin</artifactId>
> | <inherited>true</inherited>
> | <extensions>true</extensions>
> | <configuration>
> | <instructions>
> | <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
> | <Import-Package>
> | jline*;version="2.13.0",
> | *
> | </Import-Package>
> | </instructions>
> | </configuration>
> | </plugin>
> | </plugins>
> | </build>
>
> I guess this leads to my bundle not finding the correct Terminal classes.
>
> -Max
>
>
> On 12/07/2016 10:42 AM, Guillaume Nodet wrote:
>
> The second approach should definitely work, see
> https://github.com/apache/karaf/blob/karaf-3.0.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/MoreAction.java#L40 <https://github.com/apache/karaf/blob/karaf-3.0.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/MoreAction.java#L40>
>
> The exception is a bit unexpected. Maybe you're compiling against a very old version of jline ? In JLine 1.x, the Terminal was an abstract class, but it has been changed to an interface in jline 2.x.
>
> 2016-12-07 19:16 GMT+01:00 Max Spring <m2spring@springdot.org <ma...@springdot.org> <mailto:m2spring@springdot.org <ma...@springdot.org>>>:
>
>
> Is there a way to get the actual jline terminal object in a Karaf command?
> I want to format the command output depending on the terminal width.
> I'm on Ubuntu 16.04, Java 1.8.0_60-x64, and Karaf 3.0.5.
>
> This one
>
> package org.example;
>
> import jline.TerminalFactory;
> import org.apache.karaf.shell.commands.Command;
> import org.apache.karaf.shell.console.OsgiCommandSupport;
>
> @Command(scope = "example", name = "term-wdith", description = "get the terminal width")
> public class TermWidthCmd extends OsgiCommandSupport{
>
> protected Object doExecute() throws Exception {
> int w = TerminalFactory.get().getTerminalWidth();
>
> return null;
> }
> }
>
> gives:
>
> | 2016-12-07 10:10:17,443 | ERROR | l for user karaf | ShellUtil | 27 - org.apache.karaf.shell.console - 3.0.5 | Exception caught while executing command
> | java.lang.IncompatibleClassChangeError: Found interface jline.Terminal, but class was expected
> | at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:11)
> | at org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)
> | at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)
> | at org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)
> | at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown Source)
> | at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown Source)
> | at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
> | at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
> | at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
> | at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
> | at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
> | at org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
> | at java.security.AccessController.doPrivileged(Native Method)[:1.8.0_60]
> | at org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas.modules:3.0.5]
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.shell.console:3.0.5]
>
> The 2nd approach
>
> package org.example;
>
> import jline.NoInterruptUnixTerminal;
> import jline.Terminal;
> import org.apache.karaf.shell.commands.Command;
> import org.apache.karaf.shell.console.OsgiCommandSupport;
>
> @Command(scope = "example", name = "term-wdith", description = "get the terminal width")
> public class TermWidthCmd extends OsgiCommandSupport{
>
> protected Object doExecute() throws Exception {
> Terminal term = session != null ? (Terminal) session.get(".jline.terminal") : null;
> NoInterruptUnixTerminal uterm = (NoInterruptUnixTerminal)term;
> int w = term.getTerminalWidth();
>
> return null;
> }
> }
>
> basically gives the same exception:
>
> | 2016-12-07 10:09:11,964 | ERROR | l for user karaf | ShellUtil | 27 - org.apache.karaf.shell.console - 3.0.5 | Exception caught while executing command
> | java.lang.IncompatibleClassChangeError: Found interface jline.Terminal, but class was expected
> | at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:14)
> | at org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)
> | at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)
> | at org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)
> | at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown Source)
> | at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown Source)
> | at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
> | at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
> | at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
> | at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
> | at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
> | at org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
> | at java.security.AccessController.doPrivileged(Native Method)[:1.8.0_60]
> | at org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas.modules:3.0.5]
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.shell.console:3.0.5]
>
> What am I missing?
>
> Thanks!
> -Max
>
>
>
>
> --
> ------------------------
> Guillaume Nodet
> ------------------------
> Red Hat, Open Source Integration
>
> Email: gnodet@redhat.com <ma...@redhat.com> <mailto:gnodet@redhat.com <ma...@redhat.com>>
> Web: http://fusesource.com <http://fusesource.com/>
> Blog: http://gnodet.blogspot.com/
>
>
>
>
>
> --
> ------------------------
> Guillaume Nodet
> ------------------------
> Red Hat, Open Source Integration
>
> Email: gnodet@redhat.com <ma...@redhat.com>
> Web: http://fusesource.com <http://fusesource.com/>
> Blog: http://gnodet.blogspot.com/
>
Re: how to get Karaf's terminal width?
Posted by Guillaume Nodet <gn...@apache.org>.
Can you run a "mvn dependency:tree" on your bundle ? I do suspect you have
a jline 1.x somewhere, as found by the maven bundle plugin when computing
the package version.
2016-12-07 20:06 GMT+01:00 Max Spring <m2...@springdot.org>:
> Yes, I probably have here some build issue going on.
>
> I've got the jline bundle v2.13.0 in my container:
>
> | karaf@root()> list -s -t 0 | grep jline
> | 22 | Active | 30 | 2.13.0 | jline
> |
> | karaf@root()> bundle:headers 22
> |
> | JLine (22)
> | ----------
> | Archiver-Version = Plexus Archiver
> | Originally-Created-By = Apache Maven Bundle Plugin
> | Created-By = Apache Maven Bundle Plugin
> | Manifest-Version = 1.0
> | Bnd-LastModified = 1439224319120
> | Build-Jdk = 1.8.0_45
> | Built-By = gnodet
> | Tool = Bnd-2.4.1.201501161923
> |
> | Bundle-License = http://www.opensource.org/licenses/bsd-license.php
> | Bundle-ManifestVersion = 2
> | Bundle-SymbolicName = jline
> | Bundle-Version = 2.13.0
> | Bundle-Name = JLine
> | Bundle-Description = Sonatype helps open source projects to set up Maven
> repositories on https://oss.sonatype.org/
> |
> | Require-Capability =
> | osgi.ee;filter:=(&(osgi.ee=JavaSE)(version=1.5))
> |
> | Export-Package =
> | jline;uses:=jline.internal;version=2.13.0,
> | jline.console;uses:="jline,jline.console.completer,jline.co
> nsole.history";version=2.13.0,
> | jline.console.completer;uses:=jline.console;version=2.13.0,
> | jline.console.history;version=2.13.0,
> | jline.console.internal;version=2.13.0,
> | jline.internal;version=2.13.0,
> | org.fusesource.jansi;version=1.11
>
> The Maven artifact with version 2.13 is identical to the cached bundle
> (not sure why the Maven artifact doesn't have the micro version, though):
>
> | $ diff karaf/data/cache/bundle22/version0.0/bundle.jar
> ~/.m2/repository/jline/jline/2.13/jline-2.13.jar; echo $?
> | 0
>
> If I do this in my POM
>
> | <dependencies>
> | ...
> | <dependency>
> | <groupId>jline</groupId>
> | <artifactId>jline</artifactId>
> | <version>2.13</version>
> | </dependency>
> | ...
> | </dependencies>
> |
> | <build>
> | <plugins>
> | <plugin>
> | <groupId>org.apache.felix</groupId>
> | <artifactId>maven-bundle-plugin</artifactId>
> | <inherited>true</inherited>
> | <extensions>true</extensions>
> | <configuration>
> | <instructions>
> | <Bundle-SymbolicName>${project.artifactId}</Bundle-Symbolic
> Name>
> | </instructions>
> | </configuration>
> | </plugin>
> | </plugins>
> | </build>
>
> then when I try to install my feature which references my bundle with the
> example command, I get:
>
> | karaf@root()> feature:install my-feature
> | no such process "maven/boot" to wait for
> | Error executing command: Can't install feature my-feature/0.0.0:
> | Could not start bundle mvn:org.example/example-bundle/1.0.0-SNAPSHOT in
> feature(s) example-bundle-1.0.0-SNAPSHOT: Unresolved constraint in bundle
> example-bundle [195]: Unable to resolve 195.0: missing requirement [195.0]
> osgi.wiring.package; (&(osgi.wiring.package=jline)(
> version>=0.9.0)(!(version>=1.0.0)))
>
> But when I explicitly specify the version of the jline package, my bundle
> does install:
>
> | <dependencies>
> | ...
> | <dependency>
> | <groupId>jline</groupId>
> | <artifactId>jline</artifactId>
> | <version>2.13</version>
> | </dependency>
> | ...
> | </dependencies>
> |
> | <build>
> | <plugins>
> | <plugin>
> | <groupId>org.apache.felix</groupId>
> | <artifactId>maven-bundle-plugin</artifactId>
> | <inherited>true</inherited>
> | <extensions>true</extensions>
> | <configuration>
> | <instructions>
> | <Bundle-SymbolicName>${project.artifactId}</Bundle-Symbolic
> Name>
> | <Import-Package>
> | jline*;version="2.13.0",
> | *
> | </Import-Package>
> | </instructions>
> | </configuration>
> | </plugin>
> | </plugins>
> | </build>
>
> I guess this leads to my bundle not finding the correct Terminal classes.
>
> -Max
>
>
> On 12/07/2016 10:42 AM, Guillaume Nodet wrote:
>
>> The second approach should definitely work, see
>> https://github.com/apache/karaf/blob/karaf-3.0.x/shell/comma
>> nds/src/main/java/org/apache/karaf/shell/commands/impl/
>> MoreAction.java#L40
>>
>> The exception is a bit unexpected. Maybe you're compiling against a very
>> old version of jline ? In JLine 1.x, the Terminal was an abstract class,
>> but it has been changed to an interface in jline 2.x.
>>
>> 2016-12-07 19:16 GMT+01:00 Max Spring <m2spring@springdot.org <mailto:
>> m2spring@springdot.org>>:
>>
>>
>> Is there a way to get the actual jline terminal object in a Karaf
>> command?
>> I want to format the command output depending on the terminal width.
>> I'm on Ubuntu 16.04, Java 1.8.0_60-x64, and Karaf 3.0.5.
>>
>> This one
>>
>> package org.example;
>>
>> import jline.TerminalFactory;
>> import org.apache.karaf.shell.commands.Command;
>> import org.apache.karaf.shell.console.OsgiCommandSupport;
>>
>> @Command(scope = "example", name = "term-wdith", description = "get
>> the terminal width")
>> public class TermWidthCmd extends OsgiCommandSupport{
>>
>> protected Object doExecute() throws Exception {
>> int w = TerminalFactory.get().getTerminalWidth();
>>
>> return null;
>> }
>> }
>>
>> gives:
>>
>> | 2016-12-07 10:10:17,443 | ERROR | l for user karaf | ShellUtil
>> | 27 - org.apache.karaf.shell.console - 3.0.5 | Exception
>> caught while executing command
>> | java.lang.IncompatibleClassChangeError: Found interface
>> jline.Terminal, but class was expected
>> | at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:11)
>> | at org.apache.karaf.shell.console.AbstractAction.execute(
>> AbstractAction.java:33)
>> | at org.apache.karaf.shell.console.OsgiCommandSupport.execute(
>> OsgiCommandSupport.java:39)
>> | at org.apache.karaf.shell.commands.basic.AbstractCommand.
>> execute(AbstractCommand.java:33)
>> | at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown
>> Source)
>> | at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown
>> Source)
>> | at org.apache.felix.gogo.runtime.
>> CommandProxy.execute(CommandProxy.java:78)
>> | at org.apache.felix.gogo.runtime.
>> Closure.executeCmd(Closure.java:480)
>> | at org.apache.felix.gogo.runtime.
>> Closure.executeStatement(Closure.java:406)
>> | at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
>> | at org.apache.felix.gogo.runtime.
>> Closure.execute(Closure.java:182)
>> | at org.apache.felix.gogo.runtime.
>> Closure.execute(Closure.java:119)
>> | at org.apache.felix.gogo.runtime.
>> CommandSessionImpl.execute(CommandSessionImpl.java:94)
>> | at org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(
>> ConsoleImpl.java:210)
>> | at org.apache.karaf.shell.console
>> .impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
>> | at java.security.AccessController.doPrivileged(Native
>> Method)[:1.8.0_60]
>> | at org.apache.karaf.jaas.modules.
>> JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas
>> .modules:3.0.5]
>> | at org.apache.karaf.shell.console
>> .impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.
>> java:102)[27:org.apache.karaf.shell.console:3.0.5]
>>
>> The 2nd approach
>>
>> package org.example;
>>
>> import jline.NoInterruptUnixTerminal;
>> import jline.Terminal;
>> import org.apache.karaf.shell.commands.Command;
>> import org.apache.karaf.shell.console.OsgiCommandSupport;
>>
>> @Command(scope = "example", name = "term-wdith", description = "get
>> the terminal width")
>> public class TermWidthCmd extends OsgiCommandSupport{
>>
>> protected Object doExecute() throws Exception {
>> Terminal term = session != null ? (Terminal)
>> session.get(".jline.terminal") : null;
>> NoInterruptUnixTerminal uterm =
>> (NoInterruptUnixTerminal)term;
>> int w = term.getTerminalWidth();
>>
>> return null;
>> }
>> }
>>
>> basically gives the same exception:
>>
>> | 2016-12-07 10:09:11,964 | ERROR | l for user karaf | ShellUtil
>> | 27 - org.apache.karaf.shell.console - 3.0.5 | Exception
>> caught while executing command
>> | java.lang.IncompatibleClassChangeError: Found interface
>> jline.Terminal, but class was expected
>> | at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:14)
>> | at org.apache.karaf.shell.console.AbstractAction.execute(
>> AbstractAction.java:33)
>> | at org.apache.karaf.shell.console.OsgiCommandSupport.execute(
>> OsgiCommandSupport.java:39)
>> | at org.apache.karaf.shell.commands.basic.AbstractCommand.
>> execute(AbstractCommand.java:33)
>> | at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown
>> Source)
>> | at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown
>> Source)
>> | at org.apache.felix.gogo.runtime.
>> CommandProxy.execute(CommandProxy.java:78)
>> | at org.apache.felix.gogo.runtime.
>> Closure.executeCmd(Closure.java:480)
>> | at org.apache.felix.gogo.runtime.
>> Closure.executeStatement(Closure.java:406)
>> | at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
>> | at org.apache.felix.gogo.runtime.
>> Closure.execute(Closure.java:182)
>> | at org.apache.felix.gogo.runtime.
>> Closure.execute(Closure.java:119)
>> | at org.apache.felix.gogo.runtime.
>> CommandSessionImpl.execute(CommandSessionImpl.java:94)
>> | at org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(
>> ConsoleImpl.java:210)
>> | at org.apache.karaf.shell.console
>> .impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
>> | at java.security.AccessController.doPrivileged(Native
>> Method)[:1.8.0_60]
>> | at org.apache.karaf.jaas.modules.
>> JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas
>> .modules:3.0.5]
>> | at org.apache.karaf.shell.console
>> .impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.
>> java:102)[27:org.apache.karaf.shell.console:3.0.5]
>>
>> What am I missing?
>>
>> Thanks!
>> -Max
>>
>>
>>
>>
>> --
>> ------------------------
>> Guillaume Nodet
>> ------------------------
>> Red Hat, Open Source Integration
>>
>> Email: gnodet@redhat.com <ma...@redhat.com>
>> Web: http://fusesource.com <http://fusesource.com/>
>> Blog: http://gnodet.blogspot.com/
>>
>
>
--
------------------------
Guillaume Nodet
------------------------
Red Hat, Open Source Integration
Email: gnodet@redhat.com
Web: http://fusesource.com
Blog: http://gnodet.blogspot.com/
Re: how to get Karaf's terminal width?
Posted by Max Spring <m2...@springdot.org>.
Yes, I probably have here some build issue going on.
I've got the jline bundle v2.13.0 in my container:
| karaf@root()> list -s -t 0 | grep jline
| 22 | Active | 30 | 2.13.0 | jline
|
| karaf@root()> bundle:headers 22
|
| JLine (22)
| ----------
| Archiver-Version = Plexus Archiver
| Originally-Created-By = Apache Maven Bundle Plugin
| Created-By = Apache Maven Bundle Plugin
| Manifest-Version = 1.0
| Bnd-LastModified = 1439224319120
| Build-Jdk = 1.8.0_45
| Built-By = gnodet
| Tool = Bnd-2.4.1.201501161923
|
| Bundle-License = http://www.opensource.org/licenses/bsd-license.php
| Bundle-ManifestVersion = 2
| Bundle-SymbolicName = jline
| Bundle-Version = 2.13.0
| Bundle-Name = JLine
| Bundle-Description = Sonatype helps open source projects to set up Maven repositories on https://oss.sonatype.org/
|
| Require-Capability =
| osgi.ee;filter:=(&(osgi.ee=JavaSE)(version=1.5))
|
| Export-Package =
| jline;uses:=jline.internal;version=2.13.0,
| jline.console;uses:="jline,jline.console.completer,jline.console.history";version=2.13.0,
| jline.console.completer;uses:=jline.console;version=2.13.0,
| jline.console.history;version=2.13.0,
| jline.console.internal;version=2.13.0,
| jline.internal;version=2.13.0,
| org.fusesource.jansi;version=1.11
The Maven artifact with version 2.13 is identical to the cached bundle (not sure why the Maven artifact doesn't have the micro version, though):
| $ diff karaf/data/cache/bundle22/version0.0/bundle.jar ~/.m2/repository/jline/jline/2.13/jline-2.13.jar; echo $?
| 0
If I do this in my POM
| <dependencies>
| ...
| <dependency>
| <groupId>jline</groupId>
| <artifactId>jline</artifactId>
| <version>2.13</version>
| </dependency>
| ...
| </dependencies>
|
| <build>
| <plugins>
| <plugin>
| <groupId>org.apache.felix</groupId>
| <artifactId>maven-bundle-plugin</artifactId>
| <inherited>true</inherited>
| <extensions>true</extensions>
| <configuration>
| <instructions>
| <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
| </instructions>
| </configuration>
| </plugin>
| </plugins>
| </build>
then when I try to install my feature which references my bundle with the example command, I get:
| karaf@root()> feature:install my-feature
| no such process "maven/boot" to wait for
| Error executing command: Can't install feature my-feature/0.0.0:
| Could not start bundle mvn:org.example/example-bundle/1.0.0-SNAPSHOT in feature(s) example-bundle-1.0.0-SNAPSHOT: Unresolved constraint in bundle example-bundle [195]: Unable to resolve 195.0: missing requirement [195.0] osgi.wiring.package; (&(osgi.wiring.package=jline)(version>=0.9.0)(!(version>=1.0.0)))
But when I explicitly specify the version of the jline package, my bundle does install:
| <dependencies>
| ...
| <dependency>
| <groupId>jline</groupId>
| <artifactId>jline</artifactId>
| <version>2.13</version>
| </dependency>
| ...
| </dependencies>
|
| <build>
| <plugins>
| <plugin>
| <groupId>org.apache.felix</groupId>
| <artifactId>maven-bundle-plugin</artifactId>
| <inherited>true</inherited>
| <extensions>true</extensions>
| <configuration>
| <instructions>
| <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
| <Import-Package>
| jline*;version="2.13.0",
| *
| </Import-Package>
| </instructions>
| </configuration>
| </plugin>
| </plugins>
| </build>
I guess this leads to my bundle not finding the correct Terminal classes.
-Max
On 12/07/2016 10:42 AM, Guillaume Nodet wrote:
> The second approach should definitely work, see
> https://github.com/apache/karaf/blob/karaf-3.0.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/MoreAction.java#L40
>
> The exception is a bit unexpected. Maybe you're compiling against a very old version of jline ? In JLine 1.x, the Terminal was an abstract class, but it has been changed to an interface in jline 2.x.
>
> 2016-12-07 19:16 GMT+01:00 Max Spring <m2spring@springdot.org <ma...@springdot.org>>:
>
> Is there a way to get the actual jline terminal object in a Karaf command?
> I want to format the command output depending on the terminal width.
> I'm on Ubuntu 16.04, Java 1.8.0_60-x64, and Karaf 3.0.5.
>
> This one
>
> package org.example;
>
> import jline.TerminalFactory;
> import org.apache.karaf.shell.commands.Command;
> import org.apache.karaf.shell.console.OsgiCommandSupport;
>
> @Command(scope = "example", name = "term-wdith", description = "get the terminal width")
> public class TermWidthCmd extends OsgiCommandSupport{
>
> protected Object doExecute() throws Exception {
> int w = TerminalFactory.get().getTerminalWidth();
>
> return null;
> }
> }
>
> gives:
>
> | 2016-12-07 10:10:17,443 | ERROR | l for user karaf | ShellUtil | 27 - org.apache.karaf.shell.console - 3.0.5 | Exception caught while executing command
> | java.lang.IncompatibleClassChangeError: Found interface jline.Terminal, but class was expected
> | at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:11)
> | at org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)
> | at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)
> | at org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)
> | at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown Source)
> | at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown Source)
> | at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
> | at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
> | at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
> | at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
> | at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
> | at org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
> | at java.security.AccessController.doPrivileged(Native Method)[:1.8.0_60]
> | at org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas.modules:3.0.5]
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.shell.console:3.0.5]
>
> The 2nd approach
>
> package org.example;
>
> import jline.NoInterruptUnixTerminal;
> import jline.Terminal;
> import org.apache.karaf.shell.commands.Command;
> import org.apache.karaf.shell.console.OsgiCommandSupport;
>
> @Command(scope = "example", name = "term-wdith", description = "get the terminal width")
> public class TermWidthCmd extends OsgiCommandSupport{
>
> protected Object doExecute() throws Exception {
> Terminal term = session != null ? (Terminal) session.get(".jline.terminal") : null;
> NoInterruptUnixTerminal uterm = (NoInterruptUnixTerminal)term;
> int w = term.getTerminalWidth();
>
> return null;
> }
> }
>
> basically gives the same exception:
>
> | 2016-12-07 10:09:11,964 | ERROR | l for user karaf | ShellUtil | 27 - org.apache.karaf.shell.console - 3.0.5 | Exception caught while executing command
> | java.lang.IncompatibleClassChangeError: Found interface jline.Terminal, but class was expected
> | at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:14)
> | at org.apache.karaf.shell.console.AbstractAction.execute(AbstractAction.java:33)
> | at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:39)
> | at org.apache.karaf.shell.commands.basic.AbstractCommand.execute(AbstractCommand.java:33)
> | at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown Source)
> | at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown Source)
> | at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
> | at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
> | at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
> | at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
> | at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
> | at org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(ConsoleImpl.java:210)
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1$1.run(LocalConsoleManager.java:109)
> | at java.security.AccessController.doPrivileged(Native Method)[:1.8.0_60]
> | at org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.java:57)[28:org.apache.karaf.jaas.modules:3.0.5]
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManager$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.shell.console:3.0.5]
>
> What am I missing?
>
> Thanks!
> -Max
>
>
>
>
> --
> ------------------------
> Guillaume Nodet
> ------------------------
> Red Hat, Open Source Integration
>
> Email: gnodet@redhat.com <ma...@redhat.com>
> Web: http://fusesource.com <http://fusesource.com/>
> Blog: http://gnodet.blogspot.com/
Re: how to get Karaf's terminal width?
Posted by Guillaume Nodet <gn...@apache.org>.
The second approach should definitely work, see
https://github.com/apache/karaf/blob/karaf-3.0.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/MoreAction.java#L40
The exception is a bit unexpected. Maybe you're compiling against a very
old version of jline ? In JLine 1.x, the Terminal was an abstract class,
but it has been changed to an interface in jline 2.x.
2016-12-07 19:16 GMT+01:00 Max Spring <m2...@springdot.org>:
> Is there a way to get the actual jline terminal object in a Karaf command?
> I want to format the command output depending on the terminal width.
> I'm on Ubuntu 16.04, Java 1.8.0_60-x64, and Karaf 3.0.5.
>
> This one
>
> package org.example;
>
> import jline.TerminalFactory;
> import org.apache.karaf.shell.commands.Command;
> import org.apache.karaf.shell.console.OsgiCommandSupport;
>
> @Command(scope = "example", name = "term-wdith", description = "get the
> terminal width")
> public class TermWidthCmd extends OsgiCommandSupport{
>
> protected Object doExecute() throws Exception {
> int w = TerminalFactory.get().getTerminalWidth();
>
> return null;
> }
> }
>
> gives:
>
> | 2016-12-07 10:10:17,443 | ERROR | l for user karaf | ShellUtil
> | 27 - org.apache.karaf.shell.console - 3.0.5 | Exception
> caught while executing command
> | java.lang.IncompatibleClassChangeError: Found interface jline.Terminal,
> but class was expected
> | at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:11)
> | at org.apache.karaf.shell.console.AbstractAction.execute(
> AbstractAction.java:33)
> | at org.apache.karaf.shell.console.OsgiCommandSupport.execute(
> OsgiCommandSupport.java:39)
> | at org.apache.karaf.shell.commands.basic.AbstractCommand.
> execute(AbstractCommand.java:33)
> | at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown
> Source)
> | at Proxy68e7a8f7_5f52_4001_8cfa_f4b37a3fc958.execute(Unknown
> Source)
> | at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandPr
> oxy.java:78)
> | at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.jav
> a:480)
> | at org.apache.felix.gogo.runtime.Closure.executeStatement(Closu
> re.java:406)
> | at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
> | at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(Com
> mandSessionImpl.java:94)
> | at org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(
> ConsoleImpl.java:210)
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManage
> r$2$1$1.run(LocalConsoleManager.java:109)
> | at java.security.AccessController.doPrivileged(Native
> Method)[:1.8.0_60]
> | at org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.jav
> a:57)[28:org.apache.karaf.jaas.modules:3.0.5]
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManage
> r$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.
> shell.console:3.0.5]
>
> The 2nd approach
>
> package org.example;
>
> import jline.NoInterruptUnixTerminal;
> import jline.Terminal;
> import org.apache.karaf.shell.commands.Command;
> import org.apache.karaf.shell.console.OsgiCommandSupport;
>
> @Command(scope = "example", name = "term-wdith", description = "get the
> terminal width")
> public class TermWidthCmd extends OsgiCommandSupport{
>
> protected Object doExecute() throws Exception {
> Terminal term = session != null ? (Terminal)
> session.get(".jline.terminal") : null;
> NoInterruptUnixTerminal uterm = (NoInterruptUnixTerminal)term;
> int w = term.getTerminalWidth();
>
> return null;
> }
> }
>
> basically gives the same exception:
>
> | 2016-12-07 10:09:11,964 | ERROR | l for user karaf | ShellUtil
> | 27 - org.apache.karaf.shell.console - 3.0.5 | Exception
> caught while executing command
> | java.lang.IncompatibleClassChangeError: Found interface jline.Terminal,
> but class was expected
> | at org.example.TermWidthCmd.doExecute(TermWidthCmd.java:14)
> | at org.apache.karaf.shell.console.AbstractAction.execute(
> AbstractAction.java:33)
> | at org.apache.karaf.shell.console.OsgiCommandSupport.execute(
> OsgiCommandSupport.java:39)
> | at org.apache.karaf.shell.commands.basic.AbstractCommand.
> execute(AbstractCommand.java:33)
> | at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown
> Source)
> | at Proxy1c55bc35_2cb4_47b2_b9f4_f593e49a68ce.execute(Unknown
> Source)
> | at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandPr
> oxy.java:78)
> | at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.jav
> a:480)
> | at org.apache.felix.gogo.runtime.Closure.executeStatement(Closu
> re.java:406)
> | at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
> | at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
> | at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(Com
> mandSessionImpl.java:94)
> | at org.apache.karaf.shell.console.impl.jline.ConsoleImpl.run(
> ConsoleImpl.java:210)
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManage
> r$2$1$1.run(LocalConsoleManager.java:109)
> | at java.security.AccessController.doPrivileged(Native
> Method)[:1.8.0_60]
> | at org.apache.karaf.jaas.modules.JaasHelper.doAs(JaasHelper.jav
> a:57)[28:org.apache.karaf.jaas.modules:3.0.5]
> | at org.apache.karaf.shell.console.impl.jline.LocalConsoleManage
> r$2$1.run(LocalConsoleManager.java:102)[27:org.apache.karaf.
> shell.console:3.0.5]
>
> What am I missing?
>
> Thanks!
> -Max
>
>
--
------------------------
Guillaume Nodet
------------------------
Red Hat, Open Source Integration
Email: gnodet@redhat.com
Web: http://fusesource.com
Blog: http://gnodet.blogspot.com/