GVKun编程网logo

尝试通过Inline :: Java模块将Java内联到Perl中

14

对于想了解尝试通过Inline::Java模块将Java内联到Perl中的读者,本文将提供新的信息,并且为您提供关于android–无法从java模块调用kotlin模块、Android应用程序Jav

对于想了解尝试通过Inline :: Java模块将Java内联到Perl中的读者,本文将提供新的信息,并且为您提供关于android – 无法从java模块调用kotlin模块、Android应用程序Java模块(Java 1.8)、IntelliJ-将Java项目/模块转换为Maven项目/模块、Java 6-将java.sql.Types映射到Java类型的有价值信息。

本文目录一览:

尝试通过Inline :: Java模块将Java内联到Perl中

尝试通过Inline :: Java模块将Java内联到Perl中

这是我第一次在Perl中内联Java代码的尝试。我们无法在系统上使用标准的SFTP命令。这是我的力量。我们有一个可以使用的名为SFTP.jar的jar文件。我之前的上一个人可以让Inline
:: Perl正常工作,但是他的实现草率,我想对其进行清理。

我正在该H:\svn目录的Windows系统上工作。我的模块在H:\svn\FMS3目录下,而我的jar文件SFTP.jarH:\svn\FMS3\Sftp.pm目录下。目录Sftp.pm下有一个名为的文件H:\svn\FMS3,并定义了一个名为的模块FMS3::Sftp。(我将所有自定义模块保留在FMS3父模块下)。

我在中内联了代码FMS3::Sftp,看起来好像可以编译。但是,当我尝试执行时,它要求Can''t exec JVM: open3: Can''tcall method "close" on an undefined value at C:/Perl/lib/IPC/Open3.pm line370

我到底在做什么错?

FMS3::Sftp模块:

#! /usr/bin/env perl# Sftp.pm################################################################################################################################################# PACKAGE FMS3::Sftp#package FMS3::Sftp;################################################################################################################################################## PERL PRAGMAS#use strict;use warnings;use vars qw($PERL_CLASSPATH);################################################################################################################################################## CONSTANTS#use constant {    FTP_SERVER => "10.85.10.190",    FTP_USER => "fisaftp",    FTP_PASSWORD => "Fisa123456",};################################################################################################################################################## INITIALIZE## Set a PERL_CLASSPATH that will include all directories in the# @INC array. Somewhere in this array will be located our JAR file# that we need to include, and of course, this classpath.## This will be appended to the standard $CLASSPATH environment variable.#BEGIN {    use Config;    my $cpsep;    if ($Config{osname} =~ /^mswin32/i) {        $cpsep = ";";    } else {        $cpsep = ":";    }    $PERL_CLASSPATH = join("/FMS3/Sftp/SFTP.jar$cpsep", @INC);    $PERL_CLASSPATH = "$PERL_CLASSPATH/FMS3/Sftp/SFTP.jar";}################################################################################################################################################## # PERL INLINE JAVA CODE:#use Inline (    Java => ''DATA'',    J2SDK => $ENV{JAVA_HOME},    CLASSPATH => $PERL_CLASSPATH,    STUDY => ["SFTP", "close", "list", "get", "put", "remove"],    DEBUG => 4,);################################################################################################################################################## CONSTRUCTORS#sub new {    my $class = shift;    my $server = shift;    my $user = shift;    my $password = shift;    if (not $server)   { $server = FTP_SERVER;     }    if (not $user)     { $user = FTP_USER;         }    if (not $password) { $password = FTP_PASSWORD; }    my $self = {};    bless($self, $class);    eval {$self->{CONNECTION} = new SFTP($server, $user, $password);};    if ($@) {        $self->{ERROR} = $@;        return;    }    return $self;}################################################################################################################################################## DESTRUCTOR (Automatic close on losing $self)#sub DESTROY {    my $self = shift;    $self->{CONNECTION}->close();    return 1;}##################################################################################################################################################  List#sub List {    my $self = shift;    my $location = shift;    my @list;    eval {@list = $self->{CONNECTION}->list($location);};    if ($@) {        $self->{ERROR} = $@;        return;    }    return @list;}################################################################################################################################################## Get#sub Get {    my $self = shift;    my $file = shift;    my $location = shift;    eval {$self->{CONNECTION}->get($file, $location);};    if ($@) {        $self->{ERROR} = $@;        return;    }    return 1;}################################################################################################################################################## Put#sub Put {    my $self = shift;    my $file = shift;    my $location = shift;    my $mode = shift;    eval {$self->{CONNECTION}->put($file, $location, $mode);};    if ($@) {        $self->{ERROR} = $@;        return;    }    return 1;}################################################################################################################################################## Remove#sub Remove {    my $self = shift;    my $file = shift;    eval {$self->{CONNECTION}->remove($file);};    if ($@) {        $self->{ERROR} = $@;        return;    }    return 1;}################################################################################################################################################## Error#sub Error {    my $self = shift;    return $self->{ERROR};}#########################################################################1;__DATA____Java__import com.trilead.ssh2.*;import java.io.IOException;import java.util.*;public class SFTP {    ConnectionInfo ci;    SCPClient sftp=null;    SFTPv3Client sftpv3=null;    Connection conn=null;    public SFTP(String host, String username, String password) {        boolean b=false;               conn= new Connection(host);        try {            ci=conn.connect();            b=conn.authenticateWithPassword(username,password);            if (!b) {                System.out.println("Invalid login.");                System.exit(0);            }            sftp = new SCPClient( conn );            sftpv3 = new SFTPv3Client (conn);        } catch (IOException e) {            System.out.println("Unable to connect"+": "+e.getMessage());        }    }    public void close()    {        conn.close();    }    public String[] list (String loc)    {        Vector v=null;        SFTPv3DirectoryEntry x=null;        try         {            v = sftpv3.ls(loc);        } catch (IOException e) {            System.out.println("Pickup location does not exist, please check!");             String[] value = new String[1];            return value;        }        String[] s=new String[v.size()];        for (int i=0; i<v.size(); i++) {            x = (SFTPv3DirectoryEntry)v.elementAt(i);            s[i]=x.filename;        }        return s;    }    public void get (String file, String loc)    {        try{            sftp.get(file,loc);        } catch (IOException e) {            System.out.println("Unable to download, please check location or file permissions");        }            }    public void put (String file, String loc, String mode)    {        try{            sftp.put(file,loc,mode);        } catch (IOException e) {            System.out.println("Unable to put"+": "+e.getMessage());        }    }    public void remove (String file)    {        try{            sftpv3.rm(file);        } catch (IOException e) {            System.out.println("Unable to remove"+": "+e.getMessage());        }    }}

我有一个名为test.pl的测试程序,它看起来像这样:

use FMS3::Sftp;my $ftp = FMS3::Sftp->new();print $ftp->List(".");

我要做的就是连接到我们的服务器并创建目录列表。但是,尝试运行时出现类路径错误test.pl

[perl][1] validate done.[perl][1] Starting build.[perl][4]    portable: ENV_VAR_PATH_SEP_CP for MSWin32 is '';''[perl][4]    portable: SUB_FIX_JAVA_PATH => H:\svn for MSWin32 is default ''H:\svn''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\bin for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\bin''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\Program Files\Rational\ClearQuest\cqjni.jar for MSWin32 is default ''D:\Program Files\Rational\ClearQuest\cqjni.jar''[perl][4]    portable: SUB_FIX_JAVA_PATH => C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar for MSWin32 is default ''C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar''[perl][2]  classpath candidate ''C:/Perl/site/lib/FMS3/Sftp/SFTP.jar'' scraped[perl][2]  classpath candidate ''C:/Perl/lib/FMS3/Sftp/SFTP.jar'' scraped[perl][4]    portable: SUB_FIX_JAVA_PATH => H:\svn\FMS3\Sftp\SFTP.jar for MSWin32 is default ''H:\svn\FMS3\Sftp\SFTP.jar''[perl][2]  classpath: H:\svn;D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar;D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar;D:\PROGRA~1\IBM\SQLLIB~1\bin;D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar;D:\Program Files\Rational\ClearQuest\cqjni.jar;C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar;H:\svn\FMS3\Sftp\SFTP.jar[perl][4]    portable: J2SDK_BIN for MSWin32 is ''bin''[perl][4]    portable: EXE_EXTENSION for MSWin32 is ''.exe''[perl][4]    portable: IO_REDIR for MSWin32 is ''2>&1''[perl][4]    portable: SUB_FIX_JAVA_PATH => H:\svn\_Inline\lib\auto\FMS3\Sftp_7ae5 for MSWin32 is default ''H:\svn\_Inline\lib\auto\FMS3\Sftp_7ae5''[perl][4]    portable: SUB_FIX_CMD_QUOTES => "C:\Program Files\Java\jdk1.6.0_17\bin\javac.exe" -deprecation  -d "H:\svn\_Inline\lib\auto\FMS3\Sftp_7ae5" SFTP.java > cmd.out 2>&1 for MSWin32 is default ''"C:\Program Files\Java\jdk1.6.0_17\bin\javac.exe" -deprecation  -d "H:\svn\_Inline\lib\auto\FMS3\Sftp_7ae5" SFTP.java > cmd.out 2>&1''[perl][2]  "C:\Program Files\Java\jdk1.6.0_17\bin\javac.exe" -deprecation  -d "H:\svn\_Inline\lib\auto\FMS3\Sftp_7ae5" SFTP.java > cmd.out 2>&1[perl][4]    portable: COMMAND_COM for MSWin32 is ''0''[perl][2]  classpath: .;D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar;D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar;D:\PROGRA~1\IBM\SQLLIB~1\bin;D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar;D:\Program Files\Rational\ClearQuest\cqjni.jar[perl][1] build done.[perl][1] Starting load.[perl][4]    portable: ENV_VAR_PATH_SEP_CP for MSWin32 is '';''[perl][4]    portable: SUB_FIX_JAVA_PATH => H:\svn for MSWin32 is default ''H:\svn''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\bin for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\bin''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar''[perl][4]    portable: SUB_FIX_JAVA_PATH => D:\Program Files\Rational\ClearQuest\cqjni.jar for MSWin32 is default ''D:\Program Files\Rational\ClearQuest\cqjni.jar''[perl][4]    portable: SUB_FIX_JAVA_PATH => C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar for MSWin32 is default ''C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar''[perl][2]  classpath: H:\svn;D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar;D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar;D:\PROGRA~1\IBM\SQLLIB~1\bin;D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar;D:\Program Files\Rational\ClearQuest\cqjni.jar;C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar[perl][1] starting JVM...[perl][1] client/server mode[perl][4]    portable: GOT_NEXT_FREE_PORT for MSWin32 is ''0''[perl][4]    portable: J2SDK_BIN for MSWin32 is ''bin''[perl][4]    portable: EXE_EXTENSION for MSWin32 is ''.exe''[perl][4]    portable: SUB_FIX_CMD_QUOTES => "C:\Program Files\Java\jdk1.6.0_17\bin\java.exe"  org.perl.inline.java.InlineJavaServer 4 localhost 7890 false false false for MSWin32 is default ''"C:\Program Files\Java\jdk1.6.0_17\bin\java.exe"  org.perl.inline.java.InlineJavaServer 4 localhost 7890 false false false''[perl][2]  "C:\Program Files\Java\jdk1.6.0_17\bin\java.exe"  org.perl.inline.java.InlineJavaServer 4 localhost 7890 false false false[perl][4]    portable: DEV_NULL for MSWin32 is ''nul''[perl][1] JVM owner exiting...Can''t exec JVM: open3: Can''t call method "close" on an undefined value at C:/Perl/lib/IPC/Open3.pm line 370. at C:/Perl/site/lib/Inline/Java.pm line 484INIT failed--call queue aborted.[perl][1] killed by natural death.[perl][1] exiting with 22

答案1

小编典典

好的。我想到了。我错了几件事:

  • 在研究中,我同时拥有方法和类,但我只应具有类。

错误

use Inline (    Java => ''DATA'',    J2SDK => $ENV{JAVA_HOME},    CLASSPATH => $PERL_CLASSPATH,    STUDY => ["SFTP", "close", "list", "get", "put", "remove"],#    DEBUG => 4,);

use Inline (    Java => ''DATA'',    J2SDK => $ENV{JAVA_HOME},    CLASSPATH => $PERL_CLASSPATH,    STUDY => ["SFTP"],#    DEBUG => 4,);
  • 当我将SFTP对象声明为时new,我必须给它完整的Perl名称空间:

错误

eval {$self->{CONNECTION} = new SFTP($server, $user, $password);};

eval {$self->{CONNECTION} = new FMS3::Sftp::SFTP($server, $user, $password);};

您花了几个小时在这样的东西上,放弃了,然后突然间,尘土飞扬的阁楼上的灯亮了。我是一个很聪明的人。将螺丝刀插入带电的插座中,第三次或第四次之后,我说“嘿,也许这不是一个好主意”。

android – 无法从java模块调用kotlin模块

android – 无法从java模块调用kotlin模块

我想在 java中有一个 Android应用程序,但在kotlin中有一个库模块.但是,当我尝试在手机中运行应用程序时,出现错误,说它无法找到我的Kotlin类.这是我的kotlin课程:
package com.example.mylibrary

    import android.util.Log

    class A {
        fun helloWorld(){
            Log.d("Kotlin","Hello World!")
        }
    }

和我的kotlin模块的gradle文件:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsversion "23.0.1"

    defaultConfig {
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
        }
    }
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    compile filetree(dir: 'libs',include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
buildscript {
    ext.kotlin_version = '0.6.+'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
repositories {
    mavenCentral()
}

这是我的主要活动:

package com.example.uisample;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.mylibrary.A;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        A obj = new A();
        obj.helloWorld();

    }

}

请注意android studio如何导入com.example.mylibrary.A而不是com.example.mylibrar.Akt作为参考说明. Android studio在编译之前没有报告任何错误.

应用程序的Gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsversion "23.0.1"

    defaultConfig {
        applicationId "com.example.uisample"
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
        }
    }
}

dependencies {
    compile filetree(dir: 'libs',include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile project(':mylibrary')
}

运行项目后,gradle抛出此错误:“找不到符号类A”.我究竟做错了什么?

解决方法

一些东西:

>将kotlin-android插件应用到库模块build.gradle(see the docs):

apply plugin: 'kotlin-android'

就像现在一样,你甚至没有告诉gradle编译Kotlin文件.>您的buildscript块可能应该位于顶级build.gradle而不是模块build.gradle.>考虑更新完全发布的Kotlin 1.0.1-2版本

Android应用程序Java模块(Java 1.8)

Android应用程序Java模块(Java 1.8)

Android Project(gradle)有主要的应用模块:
app – android应用程序(apply plugin:’com.android.application’)
和java模块:
network – (apply plugin:’java’)

java模块网络默认具有源代码兼容性1.8,因为lambda表达式,我真的想拥有它.

但默认情况下Android应用程序1.7我无法构建应用程序.
当然我在我的app – android模块中使用了retrolambda,但项目因为以下原因而无法编译:

错误:com.android.dx.cf.iface.ParseException:错误的类文件magic(cafebabe)或版本(0034.0000)

Error:Execution Failed for task ':app:transformClassesWithDexForDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

如果我创建我的java模块,一切都编译好:

apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7

但在这种情况下我不能使用lambda表达式,但我需要它.

我只看到下一个解决方案:

>使网络模块不是java而是android-module并使用retrolambda
(但是我要从这个模块中制作.jar而不是.aar所以它必须是
JAVA)
>不要在我的java模块中使用lambda表达式(将来会.jar)(但是
我想使用它,因为在rxJava中没有匹配愚蠢的代码
拉姆达)

对我来说最好的解决方案就是在我的java模块中使用retrolambda.我试过做类似的事情,但retroambda依赖(apply plugin:’me.tatarka.retrolambda’)在编译期间没有受到影响.
或者也许使用java 1.7与retrolambda之类的东西.
但gradle文件没有部分android {…}来设置compileOptions.

这该怎么做?

最佳答案
根据我为FunctionalIterables所做的,你的gradle文件应该是这样的:

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:3.2.3'
    }
}

repositories {
    jcenter()
}

apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'

retrolambda {
    jdk System.getenv("JAVA8_HOME")
    oldJdk System.getenv("JAVA7_HOME")
    javaVersion JavaVersion.VERSION_1_6
}

(我的gradle文件的其余部分仅与发布库有关)

Retrolambda可以完成使输出jar定位到正确的java版本所需的一切.

IntelliJ-将Java项目/模块转换为Maven项目/模块

IntelliJ-将Java项目/模块转换为Maven项目/模块

我有一个关于Bitbucket的项目。仅提交源。为了将项目检索到新机器上,我在IntelliJ中使用了Version Control> Checkout
from Version Control。

然后,它询问我是否要从该源创建一个新项目,对此我回答“是”。到目前为止,一切都很好。它为我创建了一个不错的Java小项目,由一个模块组成。

但是,将这个项目引入IntelliJ的目的是将其变成Maven项目。我找不到任何可以让我做到这一点的选择!

有没有办法让IntelliJ只是为我生成一个基本的空pom.xml,其中包含名称,artifactId和存储库?或者,是否首先有办法将项目导入为Maven项目?(每当我尝试从现有源创建项目时,它都只提供Java项目的选项。)

Java 6-将java.sql.Types映射到Java类型

Java 6-将java.sql.Types映射到Java类型

我正在寻找一个表的链接,该表包含SQL类型(java.sql.Types)与Java类型之间的映射。

你知道我在哪里可以找到吗?

关于尝试通过Inline :: Java模块将Java内联到Perl中的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于android – 无法从java模块调用kotlin模块、Android应用程序Java模块(Java 1.8)、IntelliJ-将Java项目/模块转换为Maven项目/模块、Java 6-将java.sql.Types映射到Java类型等相关内容,可以在本站寻找。

本文标签: