Merge branch 'codes'

This commit is contained in:
Jared Ye 2026-03-05 19:37:37 +08:00
commit cd7775011c
2148 changed files with 36571 additions and 568135 deletions

43
.gitignore vendored
View File

@ -1,6 +1,43 @@
*.properties
*.properties
*.properties
client/build/built-jar.properties
client/nbproject/build-impl.xml
client/nbproject/genfiles.properties
client/nbproject/private/private.properties
client/nbproject/project.properties
client/problem.html
client/test/output/Main.cpp
clientUpdater/dist/clientUpdater.jar
clientUpdater/dist/lib/Common.jar
clientUpdater/dist/README.TXT
Common/dist/Common.jar
Judger/dist/Judger.jar
Judger/dist/lib/Common.jar
*.class
*.properties
*.html
*.cpp
*.jar
*.class
*.zip
*.jar
client/nbproject/private/private.properties
*.class
*.log
*.exe
*.class
*.jar
*.class
*.class
*.7z
/client/dist/
*.class
/client/build/classes
*.class
/client/build
/client/可运行客户端环境
/Judger/备份
/JuderUI/log
/JuderUI/build
/JuderUI/log
/client/build
/client/可运行客户端环境

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

1
.idea/.name Normal file
View File

@ -0,0 +1 @@
Judger.jar

View File

@ -10,9 +10,12 @@
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ProjectColorInfo"><![CDATA[{
"associatedIndex": 6
}]]></component>
<component name="ComposerSettings">
<execution />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 6
}</component>
<component name="ProjectId" id="2aiWf7bW87V3mbwTY6CfqHLJiX4" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
@ -23,11 +26,13 @@
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
"last_opened_file_path": "D:/OJ",
"kotlin-language-version-configured": "true",
"last_opened_file_path": "D:/dhu/3B/软件架构设计/实验/实验 4 设计模式/必考/Adapter",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"settings.editor.selected.configurable": "vcs.Subversion",
"spring.configuration.checksum": "d41d8cd98f00b204e9800998ecf8427e",
"vue.rearranger.settings.migration": "true"
@ -53,6 +58,14 @@
</list>
</recent_temporary>
</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-jdk-9823dce3aa75-28b599e66164-intellij.indexing.shared.core-IU-242.23339.11" />
<option value="bundled-js-predefined-d6986cc7102b-5c90d61e3bab-JavaScript-IU-242.23339.11" />
</set>
</attachedChunks>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
<component name="SvnConfiguration" cleanupOnStartRun="true">
<configuration>C:\Users\32592\AppData\Roaming\Subversion</configuration>
@ -66,6 +79,9 @@
<option name="presentableId" value="Default" />
<updated>1704801979303</updated>
<workItem from="1704801980316" duration="598000" />
<workItem from="1719379629921" duration="24000" />
<workItem from="1742820783863" duration="109000" />
<workItem from="1743039478282" duration="37000" />
</task>
<servers />
</component>

17
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,17 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "启动程序",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}\\client\\src\\web\\test.js"
}
]
}

Binary file not shown.

BIN
Common/dist/Common.jar vendored

Binary file not shown.

View File

@ -0,0 +1,10 @@
2024-04-30 21:19:22[INFO]Log message 0
2024-04-30 21:19:22[INFO]Log message 1
2024-04-30 21:19:22[INFO]Log message 2
2024-04-30 21:19:22[INFO]Log message 3
2024-04-30 21:19:22[INFO]Log message 4
2024-04-30 21:19:22[INFO]Log message 5
2024-04-30 21:19:22[INFO]Log message 6
2024-04-30 21:19:22[INFO]Log message 7
2024-04-30 21:19:22[INFO]Log message 8
2024-04-30 21:19:22[INFO]Log message 9

32
Common/log_2024043021.txt Normal file
View File

@ -0,0 +1,32 @@
2024-04-30 21:09:04[INFO]Log message 0
2024-04-30 21:09:09[INFO]Log message 1
2024-04-30 21:09:14[INFO]Log message 2
2024-04-30 21:09:19[INFO]Log message 3
2024-04-30 21:09:24[INFO]Log message 4
2024-04-30 21:09:29[INFO]Log message 5
2024-04-30 21:09:34[INFO]Log message 6
2024-04-30 21:09:39[INFO]Log message 7
2024-04-30 21:09:44[INFO]Log message 8
2024-04-30 21:09:49[INFO]Log message 9
2024-04-30 21:11:19[INFO]Log message 0
2024-04-30 21:11:26[INFO]Log message 1
2024-04-30 21:11:38[INFO]Log message 0
2024-04-30 21:11:38[INFO]Log message 1
2024-04-30 21:11:38[INFO]Log message 2
2024-04-30 21:11:38[INFO]Log message 3
2024-04-30 21:11:38[INFO]Log message 4
2024-04-30 21:11:38[INFO]Log message 5
2024-04-30 21:11:38[INFO]Log message 6
2024-04-30 21:11:38[INFO]Log message 7
2024-04-30 21:11:38[INFO]Log message 8
2024-04-30 21:11:38[INFO]Log message 9
2024-04-30 21:13:00[INFO]Log message 0
2024-04-30 21:13:00[INFO]Log message 1
2024-04-30 21:13:00[INFO]Log message 2
2024-04-30 21:13:00[INFO]Log message 3
2024-04-30 21:13:00[INFO]Log message 4
2024-04-30 21:13:00[INFO]Log message 5
2024-04-30 21:13:00[INFO]Log message 6
2024-04-30 21:13:00[INFO]Log message 7
2024-04-30 21:13:00[INFO]Log message 8
2024-04-30 21:13:00[INFO]Log message 9

View File

@ -19,7 +19,7 @@ is divided into following sections:
- cleanup
-->
<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="Common-impl">
<project xmlns:if="ant:if" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" xmlns:unless="ant:unless" basedir=".." default="default" name="Common-impl">
<fail message="Please build using Ant 1.8.0 or higher.">
<condition>
<not>
@ -46,14 +46,79 @@ is divided into following sections:
<property file="${user.properties.file}"/>
<!-- The two properties below are usually overridden -->
<!-- by the active platform. Just a fallback. -->
<property name="default.javac.source" value="1.6"/>
<property name="default.javac.target" value="1.6"/>
<property name="default.javac.source" value="1.8"/>
<property name="default.javac.target" value="1.8"/>
</target>
<target depends="-pre-init,-init-private,-init-user" name="-init-project">
<property file="nbproject/configs/${config}.properties"/>
<property file="nbproject/project.properties"/>
</target>
<target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
<target name="-init-modules-supported">
<condition property="modules.supported.internal" value="true">
<not>
<matches pattern="1\.[0-8](\..*)?" string="${javac.source}"/>
</not>
</condition>
</target>
<target depends="-init-modules-supported" if="modules.supported.internal" name="-init-macrodef-modulename">
<macrodef name="modulename" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute name="property"/>
<attribute name="sourcepath"/>
<sequential>
<loadresource property="@{property}" quiet="true">
<javaresource classpath="@{sourcepath}" name="module-info.java" parentFirst="false"/>
<filterchain>
<stripjavacomments/>
<linecontainsregexp>
<regexp pattern="module .* \{"/>
</linecontainsregexp>
<tokenfilter>
<linetokenizer/>
<replaceregex flags="s" pattern="(\s*module\s+)(\S*)(\s*\{.*)" replace="\2"/>
</tokenfilter>
<striplinebreaks/>
</filterchain>
</loadresource>
</sequential>
</macrodef>
</target>
<target depends="-init-modules-supported,-init-macrodef-modulename" if="modules.supported.internal" name="-init-source-module-properties">
<fail message="Java 9 support requires Ant 1.10.0 or higher.">
<condition>
<not>
<antversion atleast="1.10.0"/>
</not>
</condition>
</fail>
<j2seproject3:modulename property="module.name" sourcepath="${src.dir}"/>
<condition property="named.module.internal">
<and>
<isset property="module.name"/>
<length length="0" string="${module.name}" when="greater"/>
</and>
</condition>
<condition property="unnamed.module.internal">
<not>
<isset property="named.module.internal"/>
</not>
</condition>
<property name="javac.modulepath" value=""/>
<property name="run.modulepath" value="${javac.modulepath}"/>
<property name="module.build.classes.dir" value="${build.classes.dir}"/>
<property name="debug.modulepath" value="${run.modulepath}"/>
<property name="javac.upgrademodulepath" value=""/>
<property name="run.upgrademodulepath" value="${javac.upgrademodulepath}"/>
<condition else="" property="javac.systemmodulepath.cmd.line.arg" value="--system '${javac.systemmodulepath}'">
<and>
<isset property="javac.systemmodulepath"/>
<length length="0" string="${javac.systemmodulepath}" when="greater"/>
</and>
</condition>
<property name="dist.jlink.dir" value="${dist.dir}/jlink"/>
<property name="dist.jlink.output" value="${dist.jlink.dir}/${application.title}"/>
<property name="module.name" value=""/>
</target>
<target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property,-init-modules-supported" name="-do-init">
<property name="platform.java" value="${java.home}/bin/java"/>
<available file="${manifest.file}" property="manifest.available"/>
<condition property="splashscreen.available">
@ -76,7 +141,9 @@ is divided into following sections:
<and>
<isset property="javac.profile"/>
<length length="0" string="${javac.profile}" when="greater"/>
<matches pattern="((1\.[89])|9)(\..*)?" string="${javac.source}"/>
<not>
<matches pattern="1\.[0-7](\..*)?" string="${javac.source}"/>
</not>
</and>
</condition>
<condition property="do.archive">
@ -87,15 +154,6 @@ is divided into following sections:
<istrue value="${not.archive.disabled}"/>
</or>
</condition>
<condition property="do.mkdist">
<and>
<isset property="do.archive"/>
<isset property="libs.CopyLibs.classpath"/>
<not>
<istrue value="${mkdist.disabled}"/>
</not>
</and>
</condition>
<condition property="do.archive+manifest.available">
<and>
<isset property="manifest.available"/>
@ -250,11 +308,80 @@ is divided into following sections:
</sequential>
</macrodef>
</target>
<target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
<target depends="-init-ap-cmdline-properties,-init-source-module-properties" if="modules.supported.internal" name="-init-macrodef-javac-with-module">
<macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${src.dir}" name="srcdir"/>
<attribute default="${build.classes.dir}" name="destdir"/>
<attribute default="${javac.classpath}" name="classpath"/>
<attribute default="${javac.modulepath}" name="modulepath"/>
<attribute default="${javac.upgrademodulepath}" name="upgrademodulepath"/>
<attribute default="${javac.processorpath}" name="processorpath"/>
<attribute default="${javac.processormodulepath}" name="processormodulepath"/>
<attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
<attribute default="${includes}" name="includes"/>
<attribute default="${excludes}" name="excludes"/>
<attribute default="${javac.debug}" name="debug"/>
<attribute default="${empty.dir}" name="sourcepath" unless:set="named.module.internal"/>
<attribute default="${src.dir}" if:set="named.module.internal" name="sourcepath"/>
<attribute default="${empty.dir}" name="gensrcdir"/>
<element name="customize" optional="true"/>
<sequential>
<condition property="warn.excludes.internal">
<and>
<isset property="named.module.internal"/>
<length length="0" string="@{excludes}" trim="true" when="greater"/>
</and>
</condition>
<echo if:set="warn.excludes.internal" level="warning" message="The javac excludes are not supported in the JDK 9 Named Module."/>
<property location="${build.dir}/empty" name="empty.dir"/>
<mkdir dir="${empty.dir}"/>
<mkdir dir="@{apgeneratedsrcdir}"/>
<condition property="processormodulepath.set">
<resourcecount count="0" when="greater">
<path>
<pathelement path="@{processormodulepath}"/>
</path>
</resourcecount>
</condition>
<javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
<src>
<dirset dir="@{gensrcdir}" erroronmissingdir="false">
<include name="*"/>
</dirset>
</src>
<classpath>
<path path="@{classpath}"/>
</classpath>
<modulepath>
<path path="@{modulepath}"/>
</modulepath>
<upgrademodulepath>
<path path="@{upgrademodulepath}"/>
</upgrademodulepath>
<compilerarg line="${javac.systemmodulepath.cmd.line.arg}"/>
<compilerarg line="${javac.profile.cmd.line.arg}"/>
<compilerarg line="${javac.compilerargs}"/>
<compilerarg if:set="processormodulepath.set" value="--processor-module-path"/>
<compilerarg if:set="processormodulepath.set" path="@{processormodulepath}"/>
<compilerarg unless:set="processormodulepath.set" value="-processorpath"/>
<compilerarg path="@{processorpath}:${empty.dir}" unless:set="processormodulepath.set"/>
<compilerarg line="${ap.processors.internal}"/>
<compilerarg line="${annotation.processing.processor.options}"/>
<compilerarg value="-s"/>
<compilerarg path="@{apgeneratedsrcdir}"/>
<compilerarg line="${ap.proc.none.internal}"/>
<customize/>
</javac>
</sequential>
</macrodef>
</target>
<target depends="-init-ap-cmdline-properties,-init-source-module-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors" unless="modules.supported.internal">
<macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${src.dir}" name="srcdir"/>
<attribute default="${build.classes.dir}" name="destdir"/>
<attribute default="${javac.classpath}" name="classpath"/>
<attribute default="${javac.modulepath}" name="modulepath"/>
<attribute default="${javac.upgrademodulepath}" name="upgrademodulepath"/>
<attribute default="${javac.processorpath}" name="processorpath"/>
<attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
<attribute default="${includes}" name="includes"/>
@ -291,11 +418,13 @@ is divided into following sections:
</sequential>
</macrodef>
</target>
<target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
<target depends="-init-ap-cmdline-properties,-init-source-module-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
<macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${src.dir}" name="srcdir"/>
<attribute default="${build.classes.dir}" name="destdir"/>
<attribute default="${javac.classpath}" name="classpath"/>
<attribute default="${javac.modulepath}" name="modulepath"/>
<attribute default="${javac.upgrademodulepath}" name="upgrademodulepath"/>
<attribute default="${javac.processorpath}" name="processorpath"/>
<attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
<attribute default="${includes}" name="includes"/>
@ -324,7 +453,7 @@ is divided into following sections:
</sequential>
</macrodef>
</target>
<target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
<target depends="-init-macrodef-javac-with-module,-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
<macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${src.dir}" name="srcdir"/>
<attribute default="${build.classes.dir}" name="destdir"/>
@ -379,30 +508,59 @@ is divided into following sections:
<property name="test.binarytestincludes" value=""/>
<property name="test.binaryexcludes" value=""/>
</target>
<target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
<macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
<target depends="-init-modules-supported" if="modules.supported.internal" name="-init-macrodef-junit-prototype-with-module">
<macrodef name="junit-prototype" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${includes}" name="includes"/>
<attribute default="${excludes}" name="excludes"/>
<attribute default="**" name="testincludes"/>
<attribute default="" name="testmethods"/>
<element name="customize" optional="true"/>
<element name="customizePrototype" optional="true"/>
<sequential>
<property name="junit.forkmode" value="perTest"/>
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
<test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
<syspropertyset>
<propertyref prefix="test-sys-prop."/>
<mapper from="test-sys-prop.*" to="*" type="glob"/>
</syspropertyset>
<classpath>
<path path="${run.test.classpath}"/>
</classpath>
<modulepath>
<path path="${run.test.modulepath}"/>
</modulepath>
<formatter type="brief" usefile="false"/>
<formatter type="xml"/>
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
<jvmarg value="-ea"/>
<customize/>
<jvmarg line="${run.test.jvmargs}"/>
<customizePrototype/>
</junit>
</sequential>
</macrodef>
</target>
<target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
<target depends="-init-modules-supported" name="-init-macrodef-junit-prototype-without-module" unless="modules.supported.internal">
<macrodef name="junit-prototype" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${includes}" name="includes"/>
<attribute default="${excludes}" name="excludes"/>
<element name="customizePrototype" optional="true"/>
<sequential>
<property name="junit.forkmode" value="perTest"/>
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
<syspropertyset>
<propertyref prefix="test-sys-prop."/>
<mapper from="test-sys-prop.*" to="*" type="glob"/>
</syspropertyset>
<classpath>
<path path="${run.test.classpath}"/>
</classpath>
<formatter type="brief" usefile="false"/>
<formatter type="xml"/>
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
<jvmarg value="-ea"/>
<customizePrototype/>
</junit>
</sequential>
</macrodef>
</target>
<target depends="-init-test-properties,-init-macrodef-junit-prototype-with-module,-init-macrodef-junit-prototype-without-module" if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
<macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${includes}" name="includes"/>
<attribute default="${excludes}" name="excludes"/>
@ -410,8 +568,25 @@ is divided into following sections:
<attribute default="" name="testmethods"/>
<element name="customize" optional="true"/>
<sequential>
<property name="junit.forkmode" value="perTest"/>
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
<j2seproject3:junit-prototype>
<customizePrototype>
<test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
<customize/>
</customizePrototype>
</j2seproject3:junit-prototype>
</sequential>
</macrodef>
</target>
<target depends="-init-test-properties,-init-macrodef-junit-prototype-with-module,-init-macrodef-junit-prototype-without-module" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
<macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${includes}" name="includes"/>
<attribute default="${excludes}" name="excludes"/>
<attribute default="**" name="testincludes"/>
<attribute default="" name="testmethods"/>
<element name="customize" optional="true"/>
<sequential>
<j2seproject3:junit-prototype>
<customizePrototype>
<batchtest todir="${build.test.results.dir}">
<fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
<filename name="@{testincludes}"/>
@ -420,15 +595,9 @@ is divided into following sections:
<filename name="${test.binarytestincludes}"/>
</fileset>
</batchtest>
<syspropertyset>
<propertyref prefix="test-sys-prop."/>
<mapper from="test-sys-prop.*" to="*" type="glob"/>
</syspropertyset>
<formatter type="brief" usefile="false"/>
<formatter type="xml"/>
<jvmarg value="-ea"/>
<customize/>
</junit>
</customizePrototype>
</j2seproject3:junit-prototype>
</sequential>
</macrodef>
</target>
@ -456,6 +625,10 @@ is divided into following sections:
<propertyref prefix="test-sys-prop."/>
<mapper from="test-sys-prop.*" to="*" type="glob"/>
</propertyset>
<classpath>
<path path="${run.test.classpath}"/>
</classpath>
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
<customize/>
</testng>
</sequential>
@ -510,10 +683,6 @@ is divided into following sections:
<sequential>
<j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
<customize>
<classpath>
<path path="${run.test.classpath}"/>
</classpath>
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
<jvmarg line="${run.jvmargs}"/>
<jvmarg line="${run.jvmargs.ide}"/>
</customize>
@ -521,74 +690,20 @@ is divided into following sections:
</sequential>
</macrodef>
</target>
<target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">
<macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${includes}" name="includes"/>
<attribute default="${excludes}" name="excludes"/>
<attribute default="**" name="testincludes"/>
<attribute default="" name="testmethods"/>
<element name="customize" optional="true"/>
<sequential>
<property name="junit.forkmode" value="perTest"/>
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
<test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
<syspropertyset>
<propertyref prefix="test-sys-prop."/>
<mapper from="test-sys-prop.*" to="*" type="glob"/>
</syspropertyset>
<formatter type="brief" usefile="false"/>
<formatter type="xml"/>
<jvmarg value="-ea"/>
<jvmarg line="${debug-args-line}"/>
<jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
<customize/>
</junit>
</sequential>
</macrodef>
</target>
<target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
<macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${includes}" name="includes"/>
<attribute default="${excludes}" name="excludes"/>
<attribute default="**" name="testincludes"/>
<attribute default="" name="testmethods"/>
<element name="customize" optional="true"/>
<sequential>
<property name="junit.forkmode" value="perTest"/>
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
<batchtest todir="${build.test.results.dir}">
<fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
<filename name="@{testincludes}"/>
</fileset>
<fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
<filename name="${test.binarytestincludes}"/>
</fileset>
</batchtest>
<syspropertyset>
<propertyref prefix="test-sys-prop."/>
<mapper from="test-sys-prop.*" to="*" type="glob"/>
</syspropertyset>
<formatter type="brief" usefile="false"/>
<formatter type="xml"/>
<jvmarg value="-ea"/>
<jvmarg line="${debug-args-line}"/>
<jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
<customize/>
</junit>
</sequential>
</macrodef>
</target>
<target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
<target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
<macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${includes}" name="includes"/>
<attribute default="${excludes}" name="excludes"/>
<attribute default="**" name="testincludes"/>
<attribute default="" name="testmethods"/>
<element implicit="true" name="customize" optional="true"/>
<element name="customizeDebuggee" optional="true"/>
<sequential>
<j2seproject3:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
<customize/>
</j2seproject3:junit-debug>
<j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
<customize>
<jvmarg value="-agentlib:jdwp=transport=${debug-transport},address=${jpda.address}"/>
<customizeDebuggee/>
</customize>
</j2seproject3:junit>
</sequential>
</macrodef>
</target>
@ -607,14 +722,14 @@ is divided into following sections:
<delete dir="${build.test.results.dir}" quiet="true"/>
<mkdir dir="${build.test.results.dir}"/>
<j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">
<customize>
<customizeDebuggee>
<customize2/>
<jvmarg value="-ea"/>
<arg line="${testng.debug.mode}"/>
<arg line="-d ${build.test.results.dir}"/>
<arg line="-listener org.testng.reporters.VerboseReporter"/>
<arg line="${testng.cmd.args}"/>
</customize>
</customizeDebuggee>
</j2seproject3:debug>
</sequential>
</macrodef>
@ -641,14 +756,10 @@ is divided into following sections:
<attribute default="" name="testMethod"/>
<sequential>
<j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
<customize>
<classpath>
<path path="${run.test.classpath}"/>
</classpath>
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
<customizeDebuggee>
<jvmarg line="${run.jvmargs}"/>
<jvmarg line="${run.jvmargs.ide}"/>
</customize>
</customizeDebuggee>
</j2seproject3:test-debug-impl>
</sequential>
</macrodef>
@ -728,10 +839,14 @@ is divided into following sections:
<target depends="-init-debug-args" name="-init-macrodef-nbjpda">
<macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
<attribute default="${main.class}" name="name"/>
<attribute default="${debug.modulepath}" name="modulepath"/>
<attribute default="${debug.classpath}" name="classpath"/>
<attribute default="" name="stopclassname"/>
<sequential>
<nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
<modulepath>
<path path="@{modulepath}"/>
</modulepath>
<classpath>
<path path="@{classpath}"/>
</classpath>
@ -750,18 +865,6 @@ is divided into following sections:
</macrodef>
</target>
<target name="-init-debug-args">
<property name="version-output" value="java version &quot;${ant.java.version}"/>
<condition property="have-jdk-older-than-1.4">
<or>
<contains string="${version-output}" substring="java version &quot;1.0"/>
<contains string="${version-output}" substring="java version &quot;1.1"/>
<contains string="${version-output}" substring="java version &quot;1.2"/>
<contains string="${version-output}" substring="java version &quot;1.3"/>
</or>
</condition>
<condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
<istrue value="${have-jdk-older-than-1.4}"/>
</condition>
<condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
<os family="windows"/>
</condition>
@ -771,21 +874,46 @@ is divided into following sections:
</target>
<target depends="-init-debug-args" name="-init-macrodef-debug">
<macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${module.name}" name="modulename"/>
<attribute default="${main.class}" name="classname"/>
<attribute default="${debug.modulepath}" name="modulepath"/>
<attribute default="${debug.classpath}" name="classpath"/>
<element name="customizeDebuggee" optional="true"/>
<sequential>
<j2seproject1:java classname="@{classname}" classpath="@{classpath}" modulename="@{modulename}" modulepath="@{modulepath}">
<customize>
<jvmarg value="-agentlib:jdwp=transport=${debug-transport},address=${jpda.address}"/>
<customizeDebuggee/>
</customize>
</j2seproject1:java>
</sequential>
</macrodef>
</target>
<target depends="-init-source-module-properties" if="named.module.internal" name="-init-macrodef-java-with-module">
<macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
<attribute default="${module.name}" name="modulename"/>
<attribute default="${main.class}" name="classname"/>
<attribute default="${run.modulepath}" name="modulepath"/>
<attribute default="${run.upgrademodulepath}" name="upgrademodulepath"/>
<attribute default="${run.classpath}" name="classpath"/>
<attribute default="jvm" name="jvm"/>
<element name="customize" optional="true"/>
<sequential>
<java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true">
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
<jvmarg line="${debug-args-line}"/>
<jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
<java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true" module="@{modulename}">
<classpath>
<path path="@{classpath}"/>
</classpath>
<modulepath>
<pathelement path="@{modulepath}"/>
<pathelement location="${module.build.classes.dir}"/>
</modulepath>
<upgrademodulepath>
<path path="@{upgrademodulepath}"/>
</upgrademodulepath>
<jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
<redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
<jvmarg line="${run.jvmargs}"/>
<jvmarg line="${run.jvmargs.ide}"/>
<classpath>
<path path="@{classpath}"/>
</classpath>
<syspropertyset>
<propertyref prefix="run-sys-prop."/>
<mapper from="run-sys-prop.*" to="*" type="glob"/>
@ -795,9 +923,44 @@ is divided into following sections:
</sequential>
</macrodef>
</target>
<target name="-init-macrodef-java">
<target depends="-init-source-module-properties" if="unnamed.module.internal" name="-init-macrodef-java-with-unnamed-module">
<macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
<attribute default="" name="modulename"/>
<attribute default="${main.class}" name="classname"/>
<attribute default="${run.modulepath}" name="modulepath"/>
<attribute default="${run.upgrademodulepath}" name="upgrademodulepath"/>
<attribute default="${run.classpath}" name="classpath"/>
<attribute default="jvm" name="jvm"/>
<element name="customize" optional="true"/>
<sequential>
<java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true">
<classpath>
<path path="@{classpath}"/>
</classpath>
<modulepath>
<path path="@{modulepath}"/>
</modulepath>
<upgrademodulepath>
<path path="@{upgrademodulepath}"/>
</upgrademodulepath>
<jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
<redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
<jvmarg line="${run.jvmargs}"/>
<jvmarg line="${run.jvmargs.ide}"/>
<syspropertyset>
<propertyref prefix="run-sys-prop."/>
<mapper from="run-sys-prop.*" to="*" type="glob"/>
</syspropertyset>
<customize/>
</java>
</sequential>
</macrodef>
</target>
<target depends="-init-source-module-properties" name="-init-macrodef-java-without-module" unless="modules.supported.internal">
<macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
<attribute default="" name="modulename"/>
<attribute default="${main.class}" name="classname"/>
<attribute default="" name="modulepath"/>
<attribute default="${run.classpath}" name="classpath"/>
<attribute default="jvm" name="jvm"/>
<element name="customize" optional="true"/>
@ -820,6 +983,7 @@ is divided into following sections:
</sequential>
</macrodef>
</target>
<target depends="-init-macrodef-java-with-module, -init-macrodef-java-with-unnamed-module, -init-macrodef-java-without-module" name="-init-macrodef-java"/>
<target name="-init-macrodef-copylibs">
<macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
<attribute default="${manifest.file}" name="manifest"/>
@ -909,7 +1073,9 @@ is divided into following sections:
<available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
</target>
<target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
<antcall target="clean"/>
<antcall target="clean">
<param name="no.dependencies" value="true"/>
</antcall>
</target>
<target depends="init,deps-jar" name="-pre-pre-compile">
<mkdir dir="${build.classes.dir}"/>
@ -950,7 +1116,7 @@ is divided into following sections:
<target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
<fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
<j2seproject3:force-recompile/>
<j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/>
<j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}, module-info.java" sourcepath="${src.dir}"/>
</target>
<target name="-post-compile-single">
<!-- Empty placeholder for easier customization. -->
@ -970,6 +1136,25 @@ is divided into following sections:
<!-- Empty placeholder for easier customization. -->
<!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="init,compile" name="-check-module-main-class">
<pathconvert property="main.class.file">
<string value="${main.class}"/>
<unpackagemapper from="*" to="*.class"/>
</pathconvert>
<condition property="do.module.main.class">
<and>
<isset property="main.class.available"/>
<available file="${build.classes.dir}/module-info.class"/>
<available file="${build.classes.dir}/${main.class.file}"/>
<isset property="libs.CopyLibs.classpath"/>
<available classname="org.netbeans.modules.java.j2seproject.moduletask.ModuleMainClass" classpath="${libs.CopyLibs.classpath}"/>
</and>
</condition>
</target>
<target depends="-check-module-main-class" if="do.module.main.class" name="-set-module-main-class">
<taskdef classname="org.netbeans.modules.java.j2seproject.moduletask.ModuleMainClass" classpath="${libs.CopyLibs.classpath}" name="modulemainclass"/>
<modulemainclass failonerror="false" mainclass="${main.class}" moduleinfo="${build.classes.dir}/module-info.class"/>
</target>
<target depends="init" if="do.archive" name="-do-jar-create-manifest" unless="manifest.available">
<tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
<touch file="${tmp.manifest.file}" verbose="false"/>
@ -996,21 +1181,61 @@ is divided into following sections:
<attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
</manifest>
</target>
<target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.mkdist" name="-do-jar-copylibs">
<target depends="init,compile" name="-check-do-mkdist">
<condition property="do.mkdist">
<and>
<isset property="do.archive"/>
<isset property="libs.CopyLibs.classpath"/>
<not>
<istrue value="${mkdist.disabled}"/>
</not>
<not>
<available file="${build.classes.dir}/module-info.class"/>
</not>
</and>
</condition>
</target>
<target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-check-do-mkdist" if="do.mkdist" name="-do-jar-copylibs">
<j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
<echo level="info">To run this application from the command line without Ant, try:</echo>
<property location="${dist.jar}" name="dist.jar.resolved"/>
<echo level="info">java -jar "${dist.jar.resolved}"</echo>
</target>
<target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.archive" name="-do-jar-jar" unless="do.mkdist">
<target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-check-do-mkdist" if="do.archive" name="-do-jar-jar" unless="do.mkdist">
<j2seproject1:jar manifest="${tmp.manifest.file}"/>
<property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
<property location="${dist.jar}" name="dist.jar.resolved"/>
<condition else="${dist.jar.resolved}" property="jar.usage.message.class.path.replacement" value="">
<isset property="named.module.internal"/>
</condition>
<pathconvert property="run.classpath.with.dist.jar">
<path path="${run.classpath}"/>
<map from="${build.classes.dir.resolved}" to="${jar.usage.message.class.path.replacement}"/>
</pathconvert>
<pathconvert property="run.modulepath.with.dist.jar">
<path location="${dist.jar.resolved}"/>
<path path="${run.modulepath}"/>
<map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
</pathconvert>
<condition else="" property="jar.usage.message" value="To run this application from the command line without Ant, try:${line.separator}${platform.java} -cp ${run.classpath.with.dist.jar} ${main.class}">
<condition else="${run.modulepath}" property="jar.usage.message.run.modulepath.with.dist.jar" value="${run.modulepath.with.dist.jar}">
<isset property="named.module.internal"/>
</condition>
<condition else="" property="jar.usage.message.module.path" value=" -p ${jar.usage.message.run.modulepath.with.dist.jar}">
<and>
<isset property="modules.supported.internal"/>
<length length="0" string="${jar.usage.message.run.modulepath.with.dist.jar}" when="greater"/>
</and>
</condition>
<condition else="" property="jar.usage.message.class.path" value=" -cp ${run.classpath.with.dist.jar}">
<length length="0" string="${run.classpath.with.dist.jar}" when="greater"/>
</condition>
<condition else="/${main.class}" property="jar.usage.message.main.class.class.selector" value="">
<isset property="do.module.main.class"/>
</condition>
<condition else=" ${main.class}" property="jar.usage.message.main.class" value=" -m ${module.name}${jar.usage.message.main.class.class.selector}">
<isset property="named.module.internal"/>
</condition>
<condition else="" property="jar.usage.message" value="To run this application from the command line without Ant, try:${line.separator}${platform.java}${jar.usage.message.module.path}${jar.usage.message.class.path}${jar.usage.message.main.class}">
<isset property="main.class.available"/>
</condition>
<condition else="debug" property="jar.usage.level" value="info">
@ -1029,8 +1254,73 @@ is divided into following sections:
<!-- Empty placeholder for easier customization. -->
<!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="init,compile,-pre-jar,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar" name="-do-jar"/>
<target depends="init,compile,-pre-jar,-do-jar,-post-jar" description="Build JAR." name="jar"/>
<target depends="init,compile,-pre-jar,-set-module-main-class,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar" name="-do-jar"/>
<target depends="init,compile,-pre-jar,-do-jar,-post-jar,deploy" description="Build JAR." name="jar"/>
<!--
=================
DEPLOY SECTION
=================
-->
<target name="-pre-deploy">
<!-- Empty placeholder for easier customization. -->
<!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="init" name="-check-jlink">
<condition property="do.jlink.internal">
<and>
<istrue value="${do.jlink}"/>
<isset property="do.archive"/>
<isset property="named.module.internal"/>
</and>
</condition>
</target>
<target depends="init,-do-jar,-post-jar,-pre-deploy,-check-jlink" if="do.jlink.internal" name="-do-deploy">
<delete dir="${dist.jlink.dir}" failonerror="false" quiet="true"/>
<property name="jlink.launcher.name" value="${application.title}"/>
<condition else="${module.name}" property="jlink.add.modules" value="${module.name},${jlink.additionalmodules}">
<and>
<isset property="jlink.additionalmodules"/>
<length length="0" string="${jlink.additionalmodules}" when="greater"/>
</and>
</condition>
<condition property="jlink.do.strip.internal">
<and>
<isset property="jlink.strip"/>
<istrue value="${jlink.strip}"/>
</and>
</condition>
<condition property="jlink.do.additionalparam.internal">
<and>
<isset property="jlink.additionalparam"/>
<length length="0" string="${jlink.additionalparam}" when="greater"/>
</and>
</condition>
<condition property="jlink.do.launcher.internal">
<and>
<istrue value="${jlink.launcher}"/>
<isset property="main.class.available"/>
</and>
</condition>
<property name="platform.jlink" value="${jdk.home}/bin/jlink"/>
<property name="jlink.systemmodules.internal" value="${jdk.home}/jmods"/>
<exec executable="${platform.jlink}">
<arg value="--module-path"/>
<arg path="${jlink.systemmodules.internal}:${run.modulepath}:${dist.jar}"/>
<arg value="--add-modules"/>
<arg value="${jlink.add.modules}"/>
<arg if:set="jlink.do.strip.internal" value="--strip-debug"/>
<arg if:set="jlink.do.launcher.internal" value="--launcher"/>
<arg if:set="jlink.do.launcher.internal" value="${jlink.launcher.name}=${module.name}/${main.class}"/>
<arg if:set="jlink.do.additionalparam.internal" line="${jlink.additionalparam}"/>
<arg value="--output"/>
<arg value="${dist.jlink.output}"/>
</exec>
</target>
<target name="-post-deploy">
<!-- Empty placeholder for easier customization. -->
<!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="-do-jar,-post-jar,-pre-deploy,-do-deploy,-post-deploy" name="deploy"/>
<!--
=================
EXECUTION SECTION
@ -1067,9 +1357,9 @@ is divided into following sections:
</target>
<target depends="init,compile" name="-debug-start-debuggee">
<j2seproject3:debug>
<customize>
<customizeDebuggee>
<arg line="${application.args}"/>
</customize>
</customizeDebuggee>
</j2seproject3:debug>
</target>
<target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
@ -1135,28 +1425,24 @@ is divided into following sections:
</customize>
</profile>
</target>
<target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
<target depends="-init-macrodef-junit,profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
<fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
<nbprofiledirect>
<classpath>
<path path="${run.test.classpath}"/>
</classpath>
</nbprofiledirect>
<junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">
<j2seproject3:junit excludes="${excludes}" includes="${includes}" testincludes="${profile.class}" testmethods="">
<customize>
<jvmarg value="-agentlib:jdwp=transport=${debug-transport},address=${jpda.address}"/>
<env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
<jvmarg value="${profiler.info.jvmargs.agent}"/>
<jvmarg line="${profiler.info.jvmargs}"/>
<test name="${profile.class}"/>
<classpath>
<path path="${run.test.classpath}"/>
</classpath>
<syspropertyset>
<propertyref prefix="test-sys-prop."/>
<mapper from="test-sys-prop.*" to="*" type="glob"/>
</syspropertyset>
<formatter type="brief" usefile="false"/>
<formatter type="xml"/>
</junit>
</customize>
</j2seproject3:junit>
</target>
<!--
end of pre NB72 profiling section
@ -1212,6 +1498,12 @@ is divided into following sections:
<condition else="" property="bug5101868workaround" value="*.java">
<matches pattern="1\.[56](\..*)?" string="${java.version}"/>
</condition>
<condition else="" property="javadoc.html5.cmd.line.arg" value="-html5">
<and>
<isset property="javadoc.html5"/>
<available file="${jdk.home}${file.separator}lib${file.separator}jrt-fs.jar"/>
</and>
</condition>
<javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
<classpath>
<path path="${javac.classpath}"/>
@ -1224,6 +1516,7 @@ is divided into following sections:
<exclude name="*.java"/>
</fileset>
<arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
<arg line="${javadoc.html5.cmd.line.arg}"/>
</javadoc>
<copy todir="${dist.javadoc.dir}">
<fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
@ -1250,11 +1543,63 @@ is divided into following sections:
<!-- Empty placeholder for easier customization. -->
<!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="-init-source-module-properties" if="named.module.internal" name="-init-test-javac-module-properties-with-module">
<j2seproject3:modulename property="test.module.name" sourcepath="${test.src.dir}"/>
<condition else="${empty.dir}" property="javac.test.sourcepath" value="${test.src.dir}">
<and>
<isset property="test.module.name"/>
<length length="0" string="${test.module.name}" when="greater"/>
</and>
</condition>
<condition else="--patch-module ${module.name}=${test.src.dir} --add-reads ${module.name}=ALL-UNNAMED" property="javac.test.compilerargs" value="--add-reads ${test.module.name}=ALL-UNNAMED">
<and>
<isset property="test.module.name"/>
<length length="0" string="${test.module.name}" when="greater"/>
</and>
</condition>
</target>
<target depends="-init-source-module-properties" if="named.module.internal" name="-init-test-run-module-properties">
<condition else="${module.name}" property="run.test.addexport.source.module.internal" value="${test.module.name}">
<and>
<isset property="test.module.name"/>
<length length="0" string="${test.module.name}" when="greater"/>
</and>
</condition>
<fileset dir="${build.test.classes.dir}" id="run.test.packages.internal" includes="**/*.class"/>
<property location="${build.test.classes.dir}" name="build.test.classes.dir.abs.internal"/>
<pathconvert pathsep=" " property="run.test.addexports.internal" refid="run.test.packages.internal">
<chainedmapper>
<regexpmapper from="^(.*)\Q${file.separator}\E.*\.class$$" to="\1"/>
<filtermapper>
<uniqfilter/>
<replacestring from="${build.test.classes.dir.abs.internal}" to=""/>
</filtermapper>
<cutdirsmapper dirs="1"/>
<packagemapper from="*" to="--add-exports ${run.test.addexport.source.module.internal}/*=ALL-UNNAMED"/>
</chainedmapper>
</pathconvert>
<condition else="--patch-module ${module.name}=${build.test.classes.dir} --add-modules ${module.name} --add-reads ${module.name}=ALL-UNNAMED ${run.test.addexports.internal}" property="run.test.jvmargs" value="--add-modules ${test.module.name} --add-reads ${test.module.name}=ALL-UNNAMED ${run.test.addexports.internal}">
<and>
<isset property="test.module.name"/>
<length length="0" string="${test.module.name}" when="greater"/>
</and>
</condition>
</target>
<target depends="-init-source-module-properties" name="-init-test-module-properties-without-module" unless="named.module.internal">
<property name="javac.test.sourcepath" value="${empty.dir}"/>
<property name="javac.test.compilerargs" value=""/>
<property name="run.test.jvmargs" value=""/>
</target>
<target depends="-init-test-javac-module-properties-with-module,-init-test-module-properties-without-module" name="-init-test-module-properties"/>
<target if="do.depend.true" name="-compile-test-depend">
<j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
</target>
<target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
<j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>
<target depends="init,deps-jar,compile,-init-test-module-properties,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
<j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${javac.test.sourcepath}" srcdir="${test.src.dir}">
<customize>
<compilerarg line="${javac.test.compilerargs}"/>
</customize>
</j2seproject3:javac>
<copy todir="${build.test.classes.dir}">
<fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
</copy>
@ -1268,10 +1613,14 @@ is divided into following sections:
<!-- Empty placeholder for easier customization. -->
<!-- You can override this target in the ../build.xml file. -->
</target>
<target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
<target depends="init,deps-jar,compile,-init-test-module-properties,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
<fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
<j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
<j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
<j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}, module-info.java" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}">
<customize>
<compilerarg line="${javac.test.compilerargs}"/>
</customize>
</j2seproject3:javac>
<copy todir="${build.test.classes.dir}">
<fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
</copy>
@ -1289,7 +1638,7 @@ is divided into following sections:
<target depends="init" if="have.tests" name="-pre-test-run">
<mkdir dir="${build.test.results.dir}"/>
</target>
<target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
<target depends="init,compile-test,-init-test-run-module-properties,-pre-test-run" if="have.tests" name="-do-test-run">
<j2seproject3:test includes="${includes}" testincludes="**/*Test.java"/>
</target>
<target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
@ -1301,14 +1650,14 @@ is divided into following sections:
<target depends="init" if="have.tests" name="-pre-test-run-single">
<mkdir dir="${build.test.results.dir}"/>
</target>
<target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
<target depends="init,compile-test-single,-init-test-run-module-properties,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
<fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
<j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
</target>
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
<fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
</target>
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
<target depends="init,compile-test-single,-init-test-run-module-properties,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
<target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
<fail unless="test.class">Must select some files in the IDE or set test.class</fail>
<fail unless="test.method">Must select some method in the IDE or set test.method</fail>
@ -1317,7 +1666,7 @@ is divided into following sections:
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
<fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
</target>
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
<target depends="init,compile-test-single,-init-test-run-module-properties,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
<!--
=======================
TEST DEBUGGING SECTION
@ -1335,8 +1684,9 @@ is divided into following sections:
<target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
<j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
</target>
<target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
<target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
<target depends="init,compile-test-single,-init-test-run-module-properties,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
<target depends="init,compile-test-single,-init-test-run-module-properties,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
<target depends="debug-test-method" name="debug-single-method"/>
<target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
<j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
</target>
@ -1362,9 +1712,9 @@ is divided into following sections:
<target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
<fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
<j2seproject3:debug classname="sun.applet.AppletViewer">
<customize>
<customizeDebuggee>
<arg value="${applet.url}"/>
</customize>
</customizeDebuggee>
</j2seproject3:debug>
</target>
<target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
@ -1391,6 +1741,7 @@ is divided into following sections:
</target>
<target depends="init" name="-do-clean">
<delete dir="${build.dir}"/>
<delete dir="${dist.jlink.output}"/>
<delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>
</target>
<target name="-post-clean">

View File

@ -1,8 +1,8 @@
build.xml.data.CRC32=e5eafc6d
build.xml.script.CRC32=35a5ea50
build.xml.stylesheet.CRC32=8064a381@1.79.1.48
build.xml.stylesheet.CRC32=f85dc8f2@1.113.0.48
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=e5eafc6d
nbproject/build-impl.xml.script.CRC32=f31ce408
nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48
nbproject/build-impl.xml.script.CRC32=6e6b0703
nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.113.0.48

View File

@ -3,12 +3,6 @@
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group name="最新版本代码"/>
<group>
<file>file:/K:/OJ/Common/test/common/LangSelectorTest.java</file>
<file>file:/K:/OJ/Common/src/common/Const.java</file>
<file>file:/K:/OJ/Common/src/common/Config.java</file>
<file>file:/K:/OJ/Common/src/common/FileFinder.java</file>
<file>file:/K:/OJ/Common/src/common/LangSelector.java</file>
</group>
<group/>
</open-files>
</project-private>

View File

@ -19,8 +19,12 @@ build.test.results.dir=${build.dir}/test/results
#debug.transport=dt_socket
debug.classpath=\
${run.classpath}
debug.modulepath=\
${run.modulepath}
debug.test.classpath=\
${run.test.classpath}
debug.test.modulepath=\
${run.test.modulepath}
# build.classes.dir \u4e2d\u5e94\u4ece\u5206\u53d1 jar \u4e2d\u6392\u9664\u7684\u6587\u4ef6
dist.archive.excludes=
# This directory is removed when the project is cleaned:
@ -58,6 +62,8 @@ javac.classpath=\
javac.compilerargs=
javac.deprecation=false
javac.external.vm=false
javac.modulepath=
javac.processormodulepath=
javac.processorpath=\
${javac.classpath}
javac.source=1.8
@ -65,6 +71,8 @@ javac.target=1.8
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}
javac.test.modulepath=\
${javac.modulepath}
javac.test.processorpath=\
${javac.test.classpath}
javadoc.additionalparam=
@ -78,7 +86,7 @@ javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
main.class=common.DBConfig
main.class=common.LangSelector
meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=true
platform.active=default_platform
@ -89,9 +97,13 @@ run.classpath=\
# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
# To set system properties for unit tests define test-sys-prop.name=value:
run.jvmargs=
run.modulepath=\
${javac.modulepath}
run.test.classpath=\
${javac.test.classpath}:\
${build.test.classes.dir}
run.test.modulepath=\
${javac.test.modulepath}
source.encoding=UTF-8
src.dir=src
test.src.dir=test

View File

@ -13,7 +13,7 @@ import java.util.List;
import java.util.Map.Entry;
import java.util.Properties;
import log.Log;
import java.nio.file.Paths;
public class Config {
public static int DEBUG;
@ -100,7 +100,12 @@ public class Config {
//临时代码输出路径 若要改回配置文件读取 从const里获取字段
public static String getSourcePath() {
return "./test"; //
String curDir = Paths.get(".").toAbsolutePath().normalize().toString();
return curDir+"/test";
}
public static String getLogPath(){
String curDir = Paths.get(".").toAbsolutePath().normalize().toString();
return curDir+"/log";
}
//临时代码输出路径
@ -108,30 +113,62 @@ public class Config {
// if (isTestRelative) {
// return System.getProperty("user.dir") + prop.getProperty("relativeExeDir");
// } else {
return "./test";
String curDir = Paths.get(".").toAbsolutePath().normalize().toString();
return curDir+"/test";
//}
}
public static String getCompilerDir(String language) {
public static String getCompilerDir(String language,String compiler) {
String dir = null;
if (language.equals("c") || language.equals("cpp") || language.equals("c++")) {
dir = prop.getProperty(Const.MinGWDir);
} else if (language.equals("java")) {
dir = prop.getProperty(Const.JavaCompilerDir);
}
//todo
dir=LangSelector.getCompilerPath(language,compiler);
//if (language.equals("c") || language.equals("cpp") || language.equals("c++")) {
// dir=LangSelector.getCompilerPath("C++", compiler);
//dir = prop.getProperty(Const.MinGWDir);
//} else if (language.equals("java")) {
// dir=LangSelector.getCompilerPath("Java", compiler);
//dir = prop.getProperty(Const.JavaCompilerDir);
//}
return dir;
}
public static String CompilerDir(String language) {
//public static String getCompilerDir(String language) {
// String dir = null;
//todo
// if (language.equals("c") || language.equals("cpp") || language.equals("c++")) {
// dir=LangSelector.getCompilerPath("C++", null);
// //dir = prop.getProperty(Const.MinGWDir);
// } else if (language.equals("java")) {
// dir=LangSelector.getCompilerPath("Java", null);
// //dir = prop.getProperty(Const.JavaCompilerDir);
// }
// return dir;
// }
public static String CompilerDir(String language,String compiler) {
String dir = null;
if (language.equals("c") || language.equals("cpp") || language.equals("c++")) //返回各种语言的编译器地址
{
dir = System.getProperty("user.dir") + Const.MinGWDir;
//dir = System.getProperty("user.dir") + Const.MinGWDir;
dir=LangSelector.getCompilerPath("C++",compiler);
} else if (language.equals("java")) {
dir = System.getProperty("user.dir") + Const.JavaCompilerDir;
//dir = System.getProperty("user.dir") + Const.JavaCompilerDir;
dir=LangSelector.getCompilerPath("Java",compiler);
}
return dir;
}
// public static String CompilerDir(String language) {
// String dir = null;
//
// if (language.equals("c") || language.equals("cpp") || language.equals("c++")) //返回各种语言的编译器地址
// {
// //dir = System.getProperty("user.dir") + Const.MinGWDir;
// dir = LangSelector.getCompilerPath("C++", compiler);
// } else if (language.equals("java")) {
// //dir = System.getProperty("user.dir") + Const.JavaCompilerDir;
// dir = LangSelector.getCompilerPath("Java", null);
// }
// return dir;
// }
}

View File

@ -37,6 +37,8 @@ public class Const {
return ".cpp";
} else if (language.equals("java")) {
return ".java";
}else if(language.equals("python")){
return ".py";
}
return null;
}

View File

@ -70,12 +70,12 @@ private final static String FileName="DBConfig.properties";
public static void setPassword(String Password) {
dbConfig.setProperty("hibernate.connection.password", Password);
}
public static void main(String[] args) {
System.out.println(DBConfig.getUserName());
System.out.println(DBConfig.getPassword());
System.out.println(DBConfig.getIp());
}
//
// public static void main(String[] args) {
// System.out.println(DBConfig.getUserName());
// System.out.println(DBConfig.getPassword());
// System.out.println(DBConfig.getIp());
// }
public static void writeToFile(){
try {

View File

@ -0,0 +1,34 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package common;
/**
*
* @author tange
*/
public class EscapeXml {
// 手动转义特殊字符为 XML 实体
public static String escapeXml(String input) {
if(input.length()>1000)
input=input.substring(0,1000);
StringBuilder builder = new StringBuilder();
for (char c : input.toCharArray()) {
switch (c) {
case '<':
builder.append("&lt;");
break;
case '>':
builder.append("&gt;");
break;
default:
builder.append(c);
break;
}
}
return builder.toString();
}
}

View File

@ -1,35 +1,143 @@
package common;
import java.io.File;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
*
* @author Jared Ye
*/
public abstract class LangSelector {
private static String ConfigPath="";
private static Document Data;
public static boolean Loaded=false;
private static String lastLanguage; // 最后使用的语言
private static XPath xpath = XPathFactory.newInstance().newXPath();
static {
try {
ConfigPath=findConfigFilePath();
Data = init(ConfigPath);
customDefaultCompiler=new HashMap<>();
init();
Loaded=true;
} catch (Exception e) {
//初始化的时候没有读到config.xml
}
}
//
private static Map<String,String>customDefaultCompiler;
// by san_san
public static String getDefaultCompiler(String language) {
try {
String xpathExpr = String.format("/languages/language[@id='%s']/lastCompiler", language);
Node lastCompilerNode = (Node) xpath.evaluate(xpathExpr, Data, XPathConstants.NODE);
if (lastCompilerNode != null) {
return lastCompilerNode.getTextContent();
}
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return customDefaultCompiler.get(language);
}
public static void setDefaultCompiler(String language,String compiler) {
customDefaultCompiler.put(language, compiler);
try {
// 更新 XML 中的 lastCompiler 节点
String xpathExpr = String.format("/languages/language[@id='%s']", language);
Node languageNode = (Node) xpath.evaluate(xpathExpr, Data, XPathConstants.NODE);
if (languageNode != null) {
Element languageElement = (Element) languageNode;
Node lastCompilerNode = (Node) xpath.evaluate("lastCompiler", languageElement, XPathConstants.NODE);
if (lastCompilerNode == null) {
// 如果 lastCompiler 节点不存在创建它
lastCompilerNode = Data.createElement("lastCompiler");
languageElement.appendChild(lastCompilerNode);
}
lastCompilerNode.setTextContent(compiler);
}
} catch (XPathExpressionException e) {
e.printStackTrace();
}
}
//
// by san_san
// 获取最后使用的语言
public static String getLastLanguage() {
try {
String xpathExpr = "/languages/lastLanguage";
Node lastLanguageNode = (Node) xpath.evaluate(xpathExpr, Data, XPathConstants.NODE);
if (lastLanguageNode != null) {
return lastLanguageNode.getTextContent();
}
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return null;
}
// 设置最后使用的语言
public static void setLastLanguage(String language) {
try {
// 标准化语言名称
String standardLanguage = parseStandardLanguageName(language);
// 查找现有的 lastLanguage 节点
String xpathExpr = "/languages/lastLanguage";
Node lastLanguageNode = (Node) xpath.evaluate(xpathExpr, Data, XPathConstants.NODE);
if (lastLanguageNode != null) {
// 如果节点存在更新内容
lastLanguageNode.setTextContent(standardLanguage);
} else {
// 如果节点不存在创建新节点
Element root = Data.getDocumentElement();
Element newLastLanguage = Data.createElement("lastLanguage");
newLastLanguage.setTextContent(standardLanguage);
root.appendChild(newLastLanguage);
}
// 更新内存中的值
lastLanguage = standardLanguage;
// 保存到文件
save(ConfigPath);
} catch (Exception e) {
e.printStackTrace();
}
}
private static String findConfigFilePath() {
String currentPath = System.getProperty("user.dir");
String configFile = "config.xml";
@ -63,8 +171,163 @@ public abstract class LangSelector {
public static String getConfigPath(){
return ConfigPath;
}
/////////////////////////////////新增的逻辑
public static void save(String filePath) throws Exception {
Document doc = Data;
// 创建TransformerFactory实例
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// 将Document转换为DOMSource
DOMSource source = new DOMSource(doc);
// 创建StreamResult以保存到文件
StreamResult result = new StreamResult(new File(filePath));
// 执行转换并写入文件
transformer.transform(source, result);
System.out.println("XML 文件保存成功: " + filePath);
}
public static boolean setCompilerPath(String languageName, String compilerName, String newPath) {
languageName = parseStandardLanguageName(languageName);
if (compilerName == null || compilerName.trim().equals("")) {
compilerName = getDefaultCompilerName(languageName);
}
try {
// 定义XPath表达式来找到对应的编译器path节点
String exp = "/languages/language" + "[@id='" + languageName + "']" + "//compiler[@name='" + compilerName + "']//path";
// 使用XPath查找对应节点
Node pathNode = (Node) xpath.evaluate(exp, Data, XPathConstants.NODE);
// 检查path节点是否存在
if (pathNode != null) {
// 设置新路径
pathNode.setTextContent(newPath);
return true; // 返回true表示设置成功
} else {
System.out.println("找不到指定的编译器路径节点");
return false;
}
} catch (XPathExpressionException e) {
System.out.println(e.getMessage());
return false;
}
}
public static void setCompileCommand(String languageName, String compilerName, String compileCommand) {
Document doc=Data;
languageName = parseStandardLanguageName(languageName);
if (compilerName == null || compilerName.trim().equals("")) {
compilerName = getDefaultCompilerName(languageName);
}
try {
String exp = "/languages/language[@id='" + languageName + "']//compiler[@name='" + compilerName + "']//compileCmd";
// 获取节点
Node compileCmdNode = (Node) xpath.evaluate(exp, Data, XPathConstants.NODE);
if (compileCmdNode != null) {
compileCmdNode.setTextContent(compileCommand);
} else {
// 创建新节点逻辑
// 这里的实现取决于你的 XML 结构假设我们有 Document 对象 doc
Element newCompilerElement = doc.createElement("compiler");
newCompilerElement.setAttribute("name", compilerName);
Element newCompileCmdElement = doc.createElement("compileCmd");
newCompileCmdElement.setTextContent(compileCommand);
newCompilerElement.appendChild(newCompileCmdElement);
// 假设你有一个表示语言的节点
Node languageNode = (Node) xpath.evaluate("/languages/language[@id='" + languageName + "']", Data, XPathConstants.NODE);
if (languageNode != null) {
languageNode.appendChild(newCompilerElement);
}
}
} catch (XPathExpressionException e) {
System.out.println(e.getMessage());
}
}
//////////////////////
public static void setLinkCommand(String languageName, String compilerName, String linkCommand) {
Document doc = Data;
languageName = parseStandardLanguageName(languageName);
if (compilerName == null || compilerName.trim().equals("")) {
compilerName = getDefaultCompilerName(languageName);
}
try {
String exp = "/languages/language[@id='" + languageName + "']//compiler[@name='" + compilerName + "']//linkCmd";
// 获取节点
Node compileCmdNode = (Node) xpath.evaluate(exp, Data, XPathConstants.NODE);
if (compileCmdNode != null) {
compileCmdNode.setTextContent(linkCommand);
} else {
// 创建新节点逻辑
// 这里的实现取决于你的 XML 结构假设我们有 Document 对象 doc
Element newCompilerElement = doc.createElement("compiler");
newCompilerElement.setAttribute("name", compilerName);
Element newCompileCmdElement = doc.createElement("linkCmd");
newCompileCmdElement.setTextContent(linkCommand);
newCompilerElement.appendChild(newCompileCmdElement);
// 假设你有一个表示语言的节点
Node languageNode = (Node) xpath.evaluate("/languages/language[@id='" + languageName + "']", Data, XPathConstants.NODE);
if (languageNode != null) {
languageNode.appendChild(newCompilerElement);
}
}
} catch (XPathExpressionException e) {
System.out.println(e.getMessage());
}
}
public static String parseStandardLanguageName(String languageName) {
try {
// 创建 XPath 对象
XPath xpath = XPathFactory.newInstance().newXPath();
// 编译 XPath 表达式
XPathExpression expr = xpath.compile("//language");
// 评估 XPath 表达式
Object result = expr.evaluate(Data, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
// 遍历每个语言节点
for (int i = 0; i < nodes.getLength(); i++) {
String id = nodes.item(i).getAttributes().getNamedItem("id").getNodeValue();
String aliasString = nodes.item(i).getAttributes().getNamedItem("alias").getNodeValue();
String[] aliases = aliasString.split(",");
// 检查 languageName 是否与 ID 匹配
if (id.equalsIgnoreCase(languageName)) {
return id;
}
// 检查 languageName 是否与别名匹配
for (String alias : aliases) {
if (alias.equalsIgnoreCase(languageName)) {
return id;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
// 如果没有匹配项则返回原始 languageName
return languageName;
}
public static String getDefaultCompilerName(String languageName){
languageName=parseStandardLanguageName(languageName);
if(customDefaultCompiler.containsKey(languageName))
{
return customDefaultCompiler.get(languageName);
}
//if(languageName.charAt(0)>='a')languageName
try{
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"/compiler[1]/@name";
@ -78,30 +341,98 @@ public abstract class LangSelector {
public static Document init(String ConfigPath) throws Exception {
public static Document init() throws Exception {
// 创建Document对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
// 创建XPath对象
LangSelector.ConfigPath =ConfigPath;
LangSelector.ConfigPath =findConfigFilePath();
//JOptionPane.showMessageDialog(null,"当前工作目录:"+ConfigPath);
// LangSelector.ConfigPath=new File(LangSelector.ConfigPath).getAbsolutePath();
return db.parse(LangSelector.ConfigPath);
Document doc=db.parse(new File(LangSelector.ConfigPath));
Data=doc;
// 加载默认编译器设置 by san_san
NodeList languageNodes = (NodeList) xpath.evaluate("/languages/language", doc, XPathConstants.NODESET);
for (int i = 0; i < languageNodes.getLength(); i++) {
Element languageElement = (Element) languageNodes.item(i);
String languageId = languageElement.getAttribute("id");
Node lastCompilerNode = (Node) xpath.evaluate("lastCompiler", languageElement, XPathConstants.NODE);
if (lastCompilerNode != null) {
customDefaultCompiler.put(languageId, lastCompilerNode.getTextContent());
} else {
// 如果 lastCompiler 不存在使用第一个编译器作为默认
NodeList compilerNodes = languageElement.getElementsByTagName("compiler");
if (compilerNodes.getLength() > 0) {
Element defaultCompiler = (Element) compilerNodes.item(0);
customDefaultCompiler.put(languageId, defaultCompiler.getAttribute("name"));
}
}
}
// 初始化 lastLanguage
Node lastLanguageNode = (Node) xpath.evaluate("/languages/lastLanguage", doc, XPathConstants.NODE);
if (lastLanguageNode != null) {
lastLanguage = lastLanguageNode.getTextContent();
} else {
// 如果不存在创建节点并设置默认值为第一个可用的语言
languageNodes = (NodeList) xpath.evaluate("/languages/language", doc, XPathConstants.NODESET);
if (languageNodes.getLength() > 0) {
Element firstLanguage = (Element) languageNodes.item(0);
lastLanguage = firstLanguage.getAttribute("id");
Element root = doc.getDocumentElement();
Element lastLanguageElement = doc.createElement("lastLanguage");
lastLanguageElement.setTextContent(lastLanguage);
root.appendChild(lastLanguageElement);
}
}
return doc;
}
// 获取语言ID的辅助方法
public static String getLanguageIdFromAlias(String alias) {
return parseStandardLanguageName(alias);
}
public static List<String> getCompilerNames(String languageName){
languageName=parseStandardLanguageName(languageName);
ArrayList<String>arrayListStr=new ArrayList<>();
try {
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"//compiler";
NodeList nodeList = (NodeList) xpath.evaluate(exp,Data,XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
Node childNode = nodeList.item(i);
arrayListStr.add(childNode.getAttributes().getNamedItem("name").getTextContent());
// 如果需要获取属性值可以使用 childNode.getAttributes().getNamedItem("attributeName").getTextContent()
}
return arrayListStr;
} catch (XPathExpressionException ex) {
Logger.getLogger(LangSelector.class.getName()).log(Level.SEVERE, null, ex);
return arrayListStr;
}
}
public static String getCompilerPath(String languageName,String compilerName) {
if(compilerName==null)compilerName=getDefaultCompilerName(languageName);
languageName=parseStandardLanguageName(languageName);
if(compilerName==null||compilerName.equals(""))compilerName=getDefaultCompilerName(languageName);
try{
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"//compiler[@name='"+compilerName+"']//path/text()";
return (String) xpath.evaluate(exp,Data);
} catch (XPathExpressionException e) {
System.out.println("null!");
System.out.println(e.getMessage());
return null;
}
}
public static String getCompileCommand(String languageName,String compilerName){
languageName=parseStandardLanguageName(languageName);
if(compilerName==null)compilerName=getDefaultCompilerName(languageName);
try{
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"//compiler[@name='"+compilerName+"']//compileCmd/text()";
@ -112,7 +443,8 @@ public abstract class LangSelector {
}
}
public static String getLinkCommand(String languageName,String compilerName){
if(compilerName==null)compilerName=getDefaultCompilerName(languageName);
languageName=parseStandardLanguageName(languageName);
if(compilerName==null||compilerName.equals(""))compilerName=getDefaultCompilerName(languageName);
try{
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"//compiler[@name='"+compilerName+"']//linkCmd/text()";
return (String) xpath.evaluate(exp,Data);
@ -122,7 +454,8 @@ public abstract class LangSelector {
}
}
public static String getRunCommand(String languageName,String compilerName){
if(compilerName==null)compilerName=getDefaultCompilerName(languageName);
languageName=parseStandardLanguageName(languageName);
if(compilerName==null||compilerName.equals(""))compilerName=getDefaultCompilerName(languageName);
try{
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"//compiler[@name='"+compilerName+"']//runCmd/text()";
return (String) xpath.evaluate(exp,Data);
@ -146,12 +479,12 @@ public abstract class LangSelector {
}
}
public static String matchPlaceHolder(String src, HashMap<String,String>map){
if(src==null||src.trim().isEmpty())return null;
for (java.util.Map.Entry<String, String> Entry : map.entrySet()) {
src = src.replace(Entry.getKey(), Entry.getValue());
System.out.println(Entry.getKey() + "已替换:" + Entry.getValue());
//System.out.println(Entry.getKey() + "已替换:" + Entry.getValue());
}
return src;
}
}

View File

@ -0,0 +1,20 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package common;
public enum LogLevel{
INFO("INFO"),
WARNING("WARNING"),
ERROR("ERROR");
private final String info;
private LogLevel(String info){
this.info=info;
}
public String getString(){
return info;
}
}

View File

@ -0,0 +1,89 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package common;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Logger {
private static Logger instance;
private PrintWriter writer;
private String logFileName;
private static final String LOG_FILE_PREFIX = "log";
private static final String LOG_FILE_SUFFIX = ".txt";
private static final long HOUR_IN_MILLISECONDS = 3600000L; // 1 hour in milliseconds
private static String Logdir = Config.getLogPath();
private Logger() {
createLogFile();
startFileUpdateThread();
}
public static synchronized Logger getInstance() {
if (instance == null) {
instance = new Logger();
}
return instance;
}
private void createLogFile() {
LocalDateTime now = LocalDateTime.now();
logFileName = Logdir+File.separator+LOG_FILE_PREFIX + "_" + now.format(DateTimeFormatter.ofPattern("yyyyMMddHH")) + LOG_FILE_SUFFIX;
System.out.println("日志文件"+logFileName+"已创建!");
try {
writer = new PrintWriter(new FileWriter(logFileName, true));
} catch (IOException e) {
e.printStackTrace();
}
}
private void startFileUpdateThread() {
Thread fileUpdateThread = new Thread(() -> {
while (true) {
try {
Thread.sleep(HOUR_IN_MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
updateLogFile();
}
});
fileUpdateThread.setDaemon(true);
fileUpdateThread.start();
}
private void updateLogFile() {
writer.close(); // Close the current log file
createLogFile(); // Create a new log file
}
public void log(String msg, LogLevel level) {
String txt = getTimeStamp() + "[" + level.getString() + "]" + msg;
System.out.println(txt);
writer.println(txt);
writer.flush();
}
private String getTimeStamp() {
LocalDateTime now = LocalDateTime.now();
return now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
public static void main(String[] args) {
Logger logger = Logger.getInstance();
for (int i = 0; i < 10; i++) {
logger.log("Log message " + i, LogLevel.INFO);
try {
Thread.sleep(50); // Sleep for 5 seconds
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

View File

@ -0,0 +1,130 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package common;
/**
*
* @author tange
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
public class VSWhereUtil {
/**
* 从指定的起始目录开始逐层向上查找 vswhere.exe
*
* @param startDir 起始目录
* @return vswhere.exe 的绝对路径
* @throws RuntimeException 如果未找到 vswhere.exe
*/
private static String findVswhereExe(File startDir) {
File currentDir = startDir;
while (currentDir != null) {
File vswhereFile = new File(currentDir, "vswhere.exe");
if (vswhereFile.exists() && vswhereFile.isFile()) {
return vswhereFile.getAbsolutePath();
}
currentDir = currentDir.getParentFile(); // 向上一级目录
}
throw new RuntimeException("未找到 vswhere.exe请确保该文件存在于程序目录或上层目录中。");
}
private static String getVcvarsPath() throws IOException, InterruptedException {
String vswhereDir=findVswhereExe(new File(System.getProperty("user.dir")));
ProcessBuilder processBuilder = new ProcessBuilder(vswhereDir,
"-latest",
"-products", "*",
"installationPath",
"-find", "**/vcvars64.bat");
processBuilder.redirectErrorStream(true); // 合并标准错误输出
Process process = processBuilder.start();
List<String> output = new ArrayList<>();
try (Scanner scanner = new Scanner(process.getInputStream())) {
while (scanner.hasNextLine()) {
output.add(scanner.nextLine());
}
}
process.waitFor();
if (!output.isEmpty()) {
return output.get(0);
}
return null;
}
public static String findClExePath() {
// 获取当前工作目录
File currentDir = new File(System.getProperty("user.dir"));
// 查找 vswhere.exe 路径
String vswherePath = findVswhereExe(currentDir);
String clExeDir = null;
try {
// 构建命令行调用 vswhere.exe
ProcessBuilder processBuilder = new ProcessBuilder(vswherePath,
"-latest",
"-products", "*",
"-requires", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
"-find", "**/Hostx64/x64/cl.exe");
// 设置工作目录为当前程序目录
processBuilder.directory(new File(System.getProperty("user.dir")));
// 启动进程
Process process = processBuilder.start();
// 读取命令行输出
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
if (line.endsWith("cl.exe")) {
clExeDir = line.substring(0, line.lastIndexOf("cl.exe"));
break;
}
}
reader.close();
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
return clExeDir;
}
public static String getMsvcCompilerCommand(){
try {
return "cmd.exe /c call \""+getVcvarsPath()+"\" && \"$compilerPath$/cl.exe\" \"$sourceFile$\" /O2 /Fe:\"$exeFile$\"";
} catch (IOException ex) {
Logger.getLogger(VSWhereUtil.class.getName()).log(Level.SEVERE, null, ex);
} catch (InterruptedException ex) {
Logger.getLogger(VSWhereUtil.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
public static String getMsvcLinkCommand(){
return "cmd.exe /c";
}
public static void main(String[] args) {
String clPath = findClExePath();
if (clPath != null) {
System.out.println("cl.exe 目录路径: " + clPath);
System.out.println(getMsvcCompilerCommand());
} else {
System.out.println("未找到 cl.exe 路径");
}
}
}

View File

@ -18,6 +18,9 @@ public class SolutionBean {
Integer userId;
Date submitTime;
String language;
//NEW
String compiler;
//
String SourceCode;
Integer codelength;
String status;
@ -27,6 +30,7 @@ public class SolutionBean {
Float score;
String remark;
public SolutionBean() {
this.id = 1;
this.examId = 1;
@ -34,6 +38,7 @@ public class SolutionBean {
this.userId = 1;
this.submitTime = new Date();
this.language = "";
this.compiler="";
this.SourceCode = "";
this.codelength = 3;
this.status = "";
@ -44,6 +49,13 @@ public class SolutionBean {
this.remark = "";
}
public void setCompiler(String compiler){
this.compiler=compiler;
}
public String getCompiler(){
return compiler;
}
public Integer getId() {
return id;
}

BIN
JuderUI/Main.obj Normal file

Binary file not shown.

82
JuderUI/OJWS.java Normal file
View File

@ -0,0 +1,82 @@
package edu.dhu.ws;
public interface OJWS {
//测试
public String test(String message);
// 将登陆人的信息转换成xml格式
public String wsLogin(String userName, String userPassword);
// 将考试列表转换成xml格式
public String wsGetExamList(String userName, String password);
// 通过Id将考试列表转换成xml格式
public String wsGetExamById(String userName, String password, int examId);
// 根据problemId查出problems和problemtestcases的相关信息转换成xml格式
public byte[] wsGetProblem(String userName, String password,int examId, int problemId);
// 根据examId查出examProblems的相关信息转换成xml格式
public String wsGetExamProblems(String userName, String password,
int examId, int page, int rows);
// 根据用户名密码examId获取examdetail的相关信息转换成xml格式
public String wsGetExamDetail(String userName, String password, int examId, int page, int rows);
// 根据用户提交的代码对WrongCases,Solution,Problems,StudentExamDetail的相关信息,返回solutionId
public String wsSubmitCode(String userName, String password, String codeXml);
// 提交本题操作
public String wsSubmitThisProblem(String userName, String password,
String codeXml);
// 获取submittedcode的信息用来检查相似度
public String wsSubmittedCode(String userName, String password,
int problemId);
// 查看测试数据,获取wrongcases的信息
public String wsViewWrongCase(String userName, String password,
int examId, int problemId, int caseId, boolean caseInfo);
// 获取最新状态
public String wsGetExamProblemStatus(String userName, String password,
int examId, int problemId);
// 裁判机获取solution等信息
public String wsGetSolutions(String account,String password,int number);
// 更新裁判后返回的结果
public String wsUpdateResult(String userName, String password,byte[] result);
// 是否允许换座
public String wsIsPermit(String userName, String password, int examId,
String UUID);
// 裁判机获取题目信息
public byte[] wsGetProblem4Judge(String userName, String password, int problemId);
// 根据examId获取智能训练题目类别
public String wsGetExamProCatagorys(String userName,String password,int examId);
//智能训练页面点击"开始做题"操作
public String wsCanDoCategory(String userName, String password, int examId);
//智能训练页面点击"我要抽题"操作
public byte[] wsDrawProblem(String userName, String password, int examId,int catId);
//智能训练模块做题记录页面数据
public String wsSubmitHistory(String userName, String password, int examId);
//智能训练模块"提交代码"操作
public String wsItrainSubmitCode(String userName, String password,int catId,String codeXml);
//智能训练模块"暂时跳过本题"操作
public String wsSkipThisProblem(String userName, String password, int examId,int catId,int problemId);
//智能训练模块"提交本题"操作
public String wsItrainSubmitThisProblem(String userName, String password,int catId,String codeXml,String continueTrain);
//智能训练模块"我要通关"操作
public String wsPassThisCategory(String userName, String password, int examId,int catId);
}

View File

@ -1,8 +1,8 @@
#Sat, 13 Jan 2024 20:50:26 +0800
#Thu, 18 Sep 2025 20:27:28 +0800
K\:\\OJ\\JuderUI=
D\:\\oj\\JuderUI=
K\:\\OJ\\Common=
D\:\\oj\\Common=
K\:\\OJ\\Judger=
D\:\\oj\\Judger=

View File

@ -3,4 +3,6 @@
<system systemId="http://47.95.22.126:8080/oj/webservice/OJWS?wsdl" uri="wsdl/47.95.22.126_8080/oj/webservice/OJWS.wsdl"/>
<system systemId="http://127.0.0.1:8080/oj/webservice/OJWS?wsdl" uri="wsdl/127.0.0.1_8080/oj/webservice/OJWS.wsdl"/>
<system systemId="http://106.15.36.190:80/oj/webservice/OJWS?wsdl" uri="wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl"/>
<system systemId="https://219.228.76.122:443/oj/webservice/OJWS?wsdl" uri="wsdl/219.228.76.122_443/oj/webservice/OJWS.wsdl"/>
<system systemId="https://219.228.76.122:8080/oj/webservice/OJWS?wsdl" uri="wsdl/219.228.76.122_8080/oj/webservice/OJWS.wsdl"/>
</catalog>

View File

@ -872,7 +872,7 @@
</wsdl:binding>
<wsdl:service name="OJWS">
<wsdl:port binding="tns:OJWSSoapBinding" name="OJWSImplPort">
<soap:address location="http://106.15.36.190/oj/webservice/OJWS" />
<soap:address location="https://219.228.76.122:8080/oj/webservice/OJWS" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -17,7 +17,7 @@ import javax.xml.ws.WebServiceFeature;
* Generated source version: 2.2
*
*/
@WebServiceClient(name = "OJWS", targetNamespace = "http://ws.dhu.edu/", wsdlLocation = "http://106.15.36.190:80/oj/webservice/OJWS?wsdl")
@WebServiceClient(name = "OJWS", targetNamespace = "http://ws.dhu.edu/", wsdlLocation = "https://219.228.76.122:443/oj/webservice/OJWS?wsdl")
public class OJWS_Service
extends Service
{
@ -30,7 +30,7 @@ public class OJWS_Service
URL url = null;
WebServiceException e = null;
try {
url = new URL("http://106.15.36.190:80/oj/webservice/OJWS?wsdl");
url = new URL("https://219.228.76.122:443/oj/webservice/OJWS?wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}

View File

@ -17,7 +17,7 @@ import javax.xml.ws.WebServiceFeature;
* Generated source version: 2.2
*
*/
@WebServiceClient(name = "OJWS", targetNamespace = "http://ws.dhu.edu/", wsdlLocation = "http://106.15.36.190:80/oj/webservice/OJWS?wsdl")
@WebServiceClient(name = "OJWS", targetNamespace = "http://ws.dhu.edu/", wsdlLocation = "https://219.228.76.122:443/oj/webservice/OJWS?wsdl")
public class OJWS_Service
extends Service
{
@ -30,7 +30,7 @@ public class OJWS_Service
URL url = null;
WebServiceException e = null;
try {
url = new URL("http://106.15.36.190:80/oj/webservice/OJWS?wsdl");
url = new URL("https://219.228.76.122:443/oj/webservice/OJWS?wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}

View File

@ -3,4 +3,6 @@
<system systemId="http://47.95.22.126:8080/oj/webservice/OJWS?wsdl" uri="xml-resources/web-service-references/OJWS/wsdl/47.95.22.126_8080/oj/webservice/OJWS.wsdl"/>
<system systemId="http://127.0.0.1:8080/oj/webservice/OJWS?wsdl" uri="xml-resources/web-service-references/OJWS/wsdl/127.0.0.1_8080/oj/webservice/OJWS.wsdl"/>
<system systemId="http://106.15.36.190:80/oj/webservice/OJWS?wsdl" uri="xml-resources/web-service-references/OJWS/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl"/>
<system systemId="https://219.228.76.122:443/oj/webservice/OJWS?wsdl" uri="xml-resources/web-service-references/OJWS/wsdl/219.228.76.122_443/oj/webservice/OJWS.wsdl"/>
<system systemId="https://219.228.76.122:8080/oj/webservice/OJWS?wsdl" uri="xml-resources/web-service-references/OJWS/wsdl/219.228.76.122_8080/oj/webservice/OJWS.wsdl"/>
</catalog>

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<languages>
<language id="C++" alias="c++,c,cpp,CPP,C">
<compiler name="MSVC">
<path>D:\裁判机\MSVC</path>
<compileCmd>$compilerPath$/bin/cl.exe /O2 /Fo"$objFile$" /Fe"$exeFile$" /I $compilerPath$\include /EHsc "$sourceFile$" /link /LIBPATH:"$compilerPath$\lib" </compileCmd>
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
<linkCmd></linkCmd>
<!-- <linkCmd>$compilerPath$/bin/link.exe /OUT:"$exeFile$" "$objFile$" /LIBPATH:"$compilerPath$\lib"</linkCmd> -->
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
<runCmd>$exeFile$</runCmd>
</compiler>
<compiler name="MinGW">
<path>D:\裁判机\MinGW64\bin</path>
<compileCmd>"$compilerPath$\g++" -Wall -g -c -std=c++1y "$sourceFile$" -o "$objFile$"</compileCmd>
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
<linkCmd>$compilerPath$\g++ "$objFile$" "$exeFile$" -o -O1</linkCmd>
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
<runCmd>$exeFile$</runCmd>
</compiler>
</language>
<language id="Java" alias="java,JAVA">
<compiler name="JDK8">
<path>C:\Program Files\Java\jdk1.8.0_121\bin</path>
<compileCmd>"$compilerPath$/javac" $sourceFile$</compileCmd>
<linkCmd>g++.exe -o $exeFile$ $objFile$ -O1</linkCmd>
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
<runCmd>$exeFile$</runCmd>
</compiler>
</language>
<language id="Python" alias="python,PYTHON,py,PY">
<compiler name="Python3">
<path>F:\裁判机\python3.12</path>
<compileCmd> </compileCmd>
<linkCmd> </linkCmd>
<runCmd>$compilerPath$/python "$sourceFile$"</runCmd>
</compiler>
</language>
</languages>

63
JuderUI/config.xml Normal file
View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<languages>
<language id="C++" alias="c++,cpp,CPP">
<compiler name="MSVC">
<path>.\MSVC</path>
<compileCmd>$compilerPath$/bin/cl.exe /O2 /Fo"$objFile$" /Fe"$exeFile$" /I $compilerPath$\include /EHsc "$sourceFile$" /link /LIBPATH:"$compilerPath$\lib" </compileCmd>
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
<linkCmd></linkCmd>
<!-- <linkCmd>$compilerPath$/bin/link.exe /OUT:"$exeFile$" "$objFile$" /LIBPATH:"$compilerPath$\lib"</linkCmd> -->
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
<runCmd>$exeFile$</runCmd>
</compiler>
<compiler name="MinGW">
<path>.\MinGW64\bin</path>
<compileCmd>"$compilerPath$\g++" -std=c++1y "$sourceFile$" -o "$exeFile$"</compileCmd>
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
<linkCmd></linkCmd>
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
<runCmd>.\test\output\Main.exe</runCmd>
</compiler>
</language>
<language id="C" alias="c">
<compiler name="MSVC">
<path>.\MSVC</path>
<compileCmd>$compilerPath$/bin/cl.exe /O2 /Fo"$objFile$" /Fe"$exeFile$" /I $compilerPath$\include "$sourceFile$" /link /LIBPATH:"$compilerPath$\lib" </compileCmd>
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
<linkCmd></linkCmd>
<!-- <linkCmd>$compilerPath$/bin/link.exe /OUT:"$exeFile$" "$objFile$" /LIBPATH:"$compilerPath$\lib"</linkCmd> -->
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
<runCmd>$exeFile$</runCmd>
</compiler>
<compiler name="MinGW">
<path>.\MinGW64\bin</path>
<compileCmd>"$compilerPath$\gcc" -std=c11 "$sourceFile$" -o "$exeFile$"</compileCmd>
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
<linkCmd></linkCmd>
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
<runCmd>.\test\output\Main.exe</runCmd>
</compiler>
</language>
<language id="Java" alias="java,JAVA">
<compiler name="JDK8">
<path>.\jdk1.8.0_121\bin</path>
<compileCmd>"$compilerPath$/javac" $sourceFile$</compileCmd>
<linkCmd></linkCmd>
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
<runCmd>$exeFile$</runCmd>
</compiler>
</language>
<language id="Python" alias="python,PYTHON,py,PY">
<compiler name="Python 3.12">
<path>.\python3.12</path>
<compileCmd> </compileCmd>
<linkCmd> </linkCmd>
<runCmd>$compilerPath$/python "$sourceFile$"</runCmd>
</compiler>
</language>
</languages>

View File

@ -1,26 +1,26 @@
#update config.properties
#Sat Jan 13 20:50:27 CST 2024
srcDir=G\:\\org\\JuderUI\\test
isCppRelative=true
relativeJavaCompilerDir=C\:\\Program Files\\Java\\jdk1.8.0_40\\bin
#Wed Feb 19 12:24:17 GMT+08:00 2025
=\=\=\=\=\=\=
<<<<<<<=.mine
>>>>>>>=.r76
Debug=1
JavaCompileDir=C\:\\Program Files\\Java\\jdk1.8.0_121\\bin
JavaRelative=3
MinGWDir=C\:\\MinGW\\bin
MinGWRelative=3
StartThreadAuto=false
ThreadNumber=1
URLaddress=10.202.40.190
Username=felix
cCompilerDir=C\:\\\u65B0\u5EFA\u6587\u4EF6\u5939
ThreadNumber=1
distributorPort=80
exeDir=G\:\\org\\JuderUI\\TMP
MinGWDir=C\:\\MinGW\\bin
relativeCCompilerDir=\\MinGW\\bin
distributorIP=106.15.36.190
JavaRelative=3
>>>>>>>=.r76
isJavaRelative=true
<<<<<<<=.mine
MinGWRelative=3
relativeCppCompilerDir=\\MinGW\\bin
javaCompilerDir=\\\\vmware-host\\Shared Folders\\\u6587\u7A3F\\NetBeansProjects\\oj\\client\\MinGW\\bin
JavaCompileDir=C\:\\Program Files\\Java\\jdk1.8.0_121\\bin
Debug=1
URLaddress=10.202.40.190
StartThreadAuto=true
=\=\=\=\=\=\=
cppCompilerDir=\\\\vmware-host\\Shared Folders\\\u6587\u7A3F\\NetBeansProjects\\oj\\client\\MinGW\\bin
distributorIP=106.15.36.190
distributorPort=8080
exeDir=G\:\\org\\JuderUI\\TMP
isCppRelative=true
isJavaRelative=true
javaCompilerDir=\\\\vmware-host\\Shared Folders\\\u6587\u7A3F\\NetBeansProjects\\oj\\client\\MinGW\\bin
relativeCCompilerDir=\\MinGW\\bin
relativeCppCompilerDir=\\MinGW\\bin
relativeJavaCompilerDir=C\:\\Program Files\\Java\\jdk1.8.0_40\\bin
srcDir=G\:\\org\\JuderUI\\test

Binary file not shown.

Binary file not shown.

BIN
JuderUI/dist/dist.zip vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
build.xml.data.CRC32=dfbf39b8
build.xml.script.CRC32=1513c9b5
build.xml.stylesheet.CRC32=8064a381@1.79.1.48
build.xml.stylesheet.CRC32=f85dc8f2@1.113.0.48
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=dfbf39b8
nbproject/build-impl.xml.script.CRC32=659c39b3
nbproject/build-impl.xml.stylesheet.CRC32=05530350@1.79.1.48
nbproject/build-impl.xml.script.CRC32=e468727d
nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.113.0.48

Some files were not shown because too many files have changed in this diff Show More