2014-04-27 9 views
10

यह थोड़ी देर के बाद से मैं इस तरह के परेशान मुद्दे से मुलाकात की। मेरे पास एक कक्षा है जो एक ही अनुप्रयोग में किसी अन्य पैकेज में बैठा हुआ एक संदर्भ है, यानी, एक और जार संग्रह फ़ाइल में नहीं है।मेवेन संकलन देता है: प्रतीक नहीं मिल सकता - एक ही ऐप में बैठे वर्ग के लिए

सहित वर्ग है learnintouch-आराम/src/परीक्षण/जावा/com/thalasoft/learnintouch/बाकी/स्वीकृति/AbstractControllerTest.java

शामिल वर्ग है /घर/स्टीफ़न/dev/जावा/परियोजनाओं/learnintouch-rest/src/test/java/com/thalasoft/learnintouch/rest/config/webTestConfiguration.java

ग्रहण के तहत कोई समस्या नहीं है और संपादक में कोई संकलन त्रुटि नहीं है।

लेकिन एक Maven निर्माण चल रहा है एक संकलन त्रुटि देता है:

mvn clean test-compile -Pacceptance 

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project learnintouch-rest: Compilation failure: Compilation failure: 
[ERROR] /home/stephane/dev/java/projects/learnintouch-rest/src/test/java/com/thalasoft/learnintouch/rest/acceptance/AbstractControllerTest.java:[16,46] cannot find symbol 
[ERROR] symbol: class WebTestConfiguration 
[ERROR] location: package com.thalasoft.learnintouch.rest.config 
[ERROR] /home/stephane/dev/java/projects/learnintouch-rest/src/test/java/com/thalasoft/learnintouch/rest/acceptance/AbstractControllerTest.java:[21,116] cannot find symbol 
[ERROR] symbol: class WebTestConfiguration 

यहाँ सहित वर्ग के कोड है:

@RunWith(SpringJUnit4ClassRunner.class) 
@Transactional 
@WebAppConfiguration 
@ContextConfiguration(classes = { 
    ApplicationConfiguration.class, 
    WebSecurityConfig.class, 
    WebConfiguration.class, 
    WebTestConfiguration.class 
}) 
public abstract class AbstractControllerTest { 

यह सार परीक्षण वर्ग स्वीकृति परीक्षण निर्देशिका के अंतर्गत बैठा है, जो मेवेन कमांड चलाते समय -प्रदर्शन प्रोफ़ाइल के स्पष्ट सक्रियण को अनिवार्य करता है।

डिफ़ॉल्ट प्रोफ़ाइल इस स्वीकृति परीक्षण को नहीं चलाती है, लेकिन केवल कुछ एकीकरण परीक्षण।

ध्यान देने योग्य एक बात यह है कि यह सार वर्ग एकीकरण परीक्षण में उपयोग की जाने वाली एक सार वर्ग की तरह दिखता है।

import com.thalasoft.learnintouch.rest.config.WebTestConfiguration; 

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration(classes = {ApplicationConfiguration.class}, 
     WebSecurityConfig.class, 
     WebConfiguration.class, 
     WebTestConfiguration.class 
     }) 
@Transactional 

public abstract class AbstractControllerTest { 

आप देख सकते हैं, यह एक दूसरे की तरह दिखता है:

यहाँ एकीकरण परीक्षण के वर्ग भी शामिल है।

मैं भी अगर यह मदद कर सकते हैं, pom.xml फ़ाइल सामग्री दे सकते हैं:

<profiles> 
    <profile> 
     <id>rest</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <test.source.dir>src/test/java/com/thalasoft/learnintouch/rest</test.source.dir> 
     </properties> 
    </profile> 
    <profile> 
     <id>acceptance</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
     </activation> 
     <properties> 
      <test.source.dir>src/test/java/com/thalasoft/learnintouch/rest/acceptance</test.source.dir> 
     </properties> 
    </profile> 
</profiles> 

आप इस पर किसी भी सुराग है, तो यह बहुत सराहना होगी।

उत्तर

8
Maven अपने परीक्षण अपनी परियोजना (src/मुख्य/जावा) के सभी स्रोत कोड के लिए उपयोग कर सकते हैं के साथ

याद आ रही है जो लग रहा है की कोशिश और सभी परीक्षण स्रोत कोड (डिफ़ॉल्ट है src/test/java)।

यहाँ, अपने प्रोफ़ाइल बाकीsrc के रूप में परीक्षण स्रोत निर्देशिका को परिभाषित करता है/परीक्षण/जावा/com/thalasoft/learnintouch/आराम तो, अपने परीक्षण कोड में src/मुख्य/जावा और सब कुछ में सब कुछ का उपयोग कर सकते src/परीक्षण/जावा/com/thalasoft/learnintouch/आराम

आपका प्रोफ़ाइल स्वीकृतिsrc/परीक्षण/जावा/com/thalasoft/learnintouch के रूप में परीक्षण स्रोत निर्देशिका को परिभाषित करता है/बाकी/स्वीकृति तो, आपका टेस्ट कोड एस में सबकुछ एक्सेस कर सकता है आरसी/मुख्य/जावा और में सब कुछ/src/test/java/com/thalasoft/learnintouch/rest/स्वीकृति। वेबटेस्ट कॉन्फ़िगरेशन तक पहुंच योग्य नहीं है क्योंकि यह उपरोक्त पैकेज में है।

विभिन्न प्रोफाइल के साथ विशिष्ट परीक्षण चलाने के लिए, मैं परीक्षण परीक्षणों के प्रभारी निश्चित प्लगइन को कॉन्फ़िगर करने की अनुशंसा करता हूं। एक अच्छा उदाहरण यहाँ उपलब्ध है: https://weblogs.java.net/blog/carcassi/archive/2011/04/21/running-integration-tests-and-unit-tests-separately-maven

+0

टिप के लिए धन्यवाद। अब मैं प्रत्येक प्रोफाइल में निर्देश को बाहर करने के साथ एक मेवेन-निश्चित फ़ायरफ़ॉक्स-प्लगइन का उपयोग करता हूं। – Stephane

+0

आपका स्वागत है। अगर यह उपयोगी है तो इस उत्तर के लिए मतदान करने के लिए स्वतंत्र महसूस करें :) धन्यवाद – Melou

-2

pom.xml में रेखा से नीचे जोड़ने के लिए मैं इसे

<profile> 
     <id>acceptance</id> 
     <activation> 
     <activeByDefault>false</activeByDefault> 
     </activation> 
     <properties> 
     <test.source.dir>src/test/java/com/thalasoft/learnintouch/rest/config</test.source.dir> 
     </properties> 
    </profile> 
+0

मुझे समझ में नहीं आता है। मेरा टेस्ट स्रोत डीआईआर है।/स्वीकार्यता तो आप सुझाव देते हैं कि इसे pom.xml प्रॉपर्टी में ./config पर सेट किया जाना चाहिए? – Stephane

1

समस्या विवरण:

मैं नीचे संरचना के साथ अपने प्रोजेक्ट के साथ इसी तरह की समस्या थी।

project 
-pom.xml 

-common-module 
--src, pom.xml, etc 

-web-module 
--src, pom.xml, etc (but dependent on 'common') 

mvn install आम मॉड्यूल के लिए ठीक से चलाने लेकिन वेब मॉड्यूल कोड आम मॉड्यूल (cannot find symbol) से जावा वर्ग का उपयोग करता है के लिए संकलन त्रुटि देता होगा। मैं JDK 8 + Maven 3.2.5 उपयोग कर रहा था, लेकिन पोम में संकलक लीवर 7.

पर सेट है मेरी समाधान:

मैं JDK 7 और Maven 3.1.1 स्थापित किया है और mvn install किया था। बिंगो ..! प्रत्येक ठीक काम के साथ & सफल बनाएँ।

मुझे अपनी समस्या के लिए कोई समाधान नहीं मिला, इसलिए यहां मेरे फिक्स को पोस्ट करने के बावजूद यह संबंधित है। (यह किसी की मदद कर सकता है)

संबंधित मुद्दे