У меня огромный проект Java, который мне приходится запускать несколько раз и проверять вывод. Я хорошо разбираюсь в python, но довольно новичок в Java, поэтому мне было интересно, как запустить Java и проверить результаты в python.
Структура файла проекта:
MainFolderName
├── .idea
│ ├── artifacts
│ └── libraries
├── lib
│ ├── mathlibrary.jar
│ └── gson-1.2.3.jar
├── out
├── resources
│ ├── pic1.png
│ └── pic2.png
├── src
│ ├── srcfile1
│ │ ├── function1.java
│ │ └── function2.java
│ ├── srcfile2
│ │ ├── anotherfunction1.java
│ │ └── anotherfunction2.java
│ ├── game
│ │ ├── someconfigurations.java
│ │ └── Main.java
│ ├── META-INF
│ └── environment.txt (used in Main.java)
├── config.txt
├── Main.iml
├── setup.json
└── pythonfiletorunMainjava.py
Когда я пытаюсь запустить указанный выше проект, используя код:
import os.path,subprocess
from subprocess import STDOUT,PIPE
def compile_java(java_file):
subprocess.check_call(['javac', java_file])
def execute_java(java_file, stdin):
java_class,ext = os.path.splitext(java_file)
cmd = ['java', '-classpath', 'C:\Program Files\Java\jdk1.8.0_211', # all dependencies are in this folder
'parseJason']
proc = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
stdout,stderr = proc.communicate(stdin)
compile_java('./path/to/Main.java')
execute_java('./path/to/Main.java', 'setup.json')
, я получаю следующую ошибку: CalledProcessError: Command '['javac', './path/to/Main.java']' returned non-zero exit status 1.
Выходные данные Anaconda содержат некоторую ошибку:
error: package com.golden.gamedev does not exist
import com.golden.gamedev.GameLoader;
^
и некоторые другие:
error: cannot find symbol
public static Something xyz;
^
symbol: class Something
location: class Main
"что-то" связано с несуществующими пакетами. В META-INF есть несколько путей к классам.
Спасибо за ваше время. Буду признателен за вашу помощь в отладке проблемы.
edit: В дополнение к этому, есть ли способ добавить строковые входы через python? В настоящее время Main. java использует args = new String[] {'some string'}
в качестве входных данных в основной функции.