Python打包Java项目脚本(二):调用第三方jar包

首先,待处理的项目结构图如下所示。

.
├── WebContent
│   ├── META-INF
│   │   └── MANIFEST.MF
│   ├── WEB-INF
│   │   ├── classes
│   │   ├── lib
│   │   └── web.xml
│   └── index.jsp
├── makefile.py
└── src
    └── com
        └── hao
            └── register
                ├── WebApi.java
                └── WebApiTest.java

调用 makefile.py 之后的项目结构图。

.
├── WebContent
│   ├── META-INF
│   │   └── MANIFEST.MF
│   ├── WEB-INF
│   │   ├── classes
│   │   │   └── com
│   │   │       └── hao
│   │   │           └── register
│   │   │               ├── WebApi.class
│   │   │               └── WebApiTest.class
│   │   ├── lib
│   │   └── web.xml
│   └── index.jsp
├── register.war
├── makefile.py
└── src
    └── com
        └── hao
            └── register
                ├── WebApi.java
                └── WebApiTest.java

编译文件只说两点:

  1. 生成的时候,存放类目录为./WebContent/WEB-INF/classes,这是由Servlet 在执行Web程序时默认的。
  2. 打包的时候只要对 ./WebContent 进行打包即可。
#!/bin/python 
# sys.argv[0] = makefile.py
# sys.argv[1] = project direcotry

import os,sys

#-------------------- Initialization ------------------------------
print(sys.argv[1])
cwd=sys.argv[1]                        # current working directory
srcDir = cwd + "/src"                  # source code directory
outDir = cwd + "/WebContent/WEB-INF/classes"   # output classes
seperator = ":"                        # semi-colon on windows
srcs = ["com.hao.register"]            # namespaces to be compiled
outwar="register.war"                  # output jar file name
# libraries refered
libs = [("/Users/hao/MyApp/tomcat8534/lib", ["servlet-api.jar"])]   

#-------------------- Formatting inputs ----------------------------
classpaths = srcDir
for item in libs:
    for i in range(len(item[1])):
        classpaths += seperator + os.path.join(item[0], item[1][i])

for i in range(len(srcs)):
    srcs[i] = os.path.join(os.path.join(srcDir, srcs[i].replace(".", "/"), "*.java"))
sourcefiles = " ".join(srcs) 

#--------- Generation of and execution compiling command -------------
os.chdir(os.getcwd())
cmdCompile = "javac -d {0} -cp {1} {2}".format(outDir, classpaths, sourcefiles)
print("Executing: " + cmdCompile)
os.system(cmdCompile)

cmdCompress = "jar cf {0}/{1} -C ./WebContent .".format(cwd, outwar)
print("Executing: " + cmdCompress)
os.system(cmdCompress)

print("Compiled.")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java调用Pythonjar包可以通过Java的ProcessBuilder类来实现。首先,需要确保Pythonjar包已经被正确地导入到Java项目中。 接下来,可以使用如下代码来创建一个进程,执行Pythonjar包: ```java try { String pythonJarPath = "path/to/python.jar"; String pythonScriptPath = "path/to/python/script.py"; ProcessBuilder pb = new ProcessBuilder("java", "-jar", pythonJarPath, pythonScriptPath); Process process = pb.start(); // 等待进程执行完成 int exitCode = process.waitFor(); if (exitCode == 0) { System.out.println("Python脚本执行成功"); } else { System.out.println("Python脚本执行失败"); } } catch (Exception e) { e.printStackTrace(); } ``` 在上述代码中,需要将`pythonJarPath`和`pythonScriptPath`替换为实际的路径。 这段代码会创建一个进程,调用Java命令来执行Pythonjar包,并指定需要执行的Python脚本路径。执行完成后,可以通过`waitFor()`方法获取进程的退出码,根据退出码来判断Python脚本的执行结果。 需要注意的是,这种方式调用Pythonjar包是通过启动一个单独的进程来实现的,因此在执行过程中可能会有一定的性能开销。同时,需要确保JavaPython的环境配置正确,以及Pythonjar包脚本路径正确。 ### 回答2: 在Java调用Python jar文件,可以借助于Jython或者使用Java的ProcessBuilder类。 Jython是一个Java平台上的Python解释器,可以将Python代码集成到Java项目中。首先需要将Python jar文件导入到Java项目中,然后使用Jython的API来执行Python代码。通过将Python代码封装在Java方法中,可以在Java代码中直接调用该方法,实现Java调用Python的功能。 另一种方法是使用Java的ProcessBuilder类,通过创建一个新的进程来执行Python脚本。需要使用ProcessBuilder类来设置Python解释器的路径以及Python脚本的路径,然后启动新的进程执行Python脚本。通过获取进程的输出流,可以获取Python脚本的运行结果。 无论是使用Jython还是ProcessBuilder类,都需要确保Python环境已正确安装,并且Python脚本的路径等信息正确设置。JavaPython之间的交互还需要考虑数据类型转换、传递参数等问题,以确保正确的数据交互。 总之,通过Jython或者ProcessBuilder类,Java可以调用Python jar文件,实现JavaPython之间的交互。具体的实现方式需要根据实际需求和环境来选择。 ### 回答3: 在Java调用Python的jar文件,可以通过Java的Process类实现。以下是实现的步骤: 1. 在Java中,首先需要使用ProcessBuilder类创建一个新的进程,并指定执行Python脚本的命令。 ```java ProcessBuilder pb = new ProcessBuilder("python", "-jar", "path/to/python.jar"); ``` 2. 设置进程的工作目录,此处为可选步骤,可以根据实际情况进行设置。 ```java pb.directory(new File("path/to/directory")); ``` 3. 启动进程并等待其执行完成。 ```java Process process = pb.start(); int exitCode = process.waitFor(); ``` 4. 解析Python脚本的输出,可以通过InputStream读取进程的输出流。 ```java String output = readStream(process.getInputStream()); ``` 其中`readStream`方法是一个用于读取输入流并将其转换为字符串的辅助方法。 5. 可选步骤,如果需要向Python脚本传递参数,可以使用ProcessBuilder的`inheritIO()`方法,将输入、输出和错误流连接到当前进程的标准输入、输出和错误流。 ```java pb.inheritIO(); ``` 这样就可以将JavaPython的交互通过Python的jar文件实现。注意,执行Python脚本需要在运行环境中安装Python,并将其添加到系统的环境变量中,以便在命令行中可以直接执行`python`命令。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值